比较字典,更新而不覆盖值[重复]

2024-03-17

I am not寻找这样的东西:

如何将两个字典合并到一个表达式中? https://stackoverflow.com/questions/38987/how-do-i-merge-two-dictionaries-in-a-single-expression

更新Python字典而不覆盖子字典的通用方法 https://stackoverflow.com/questions/22093793/generic-way-of-updating-python-dictionary-without-overwriting-the-subdictionarie?lq=1

Python:如果值存在,则通过更新但不覆盖来合并字典 https://stackoverflow.com/questions/6354436/python-dictionary-merge-by-updating-but-not-overwriting-if-value-exists

I am寻找这样的东西:

input:

d1 = {'a': 'a', 'b': 'b'}
d2 = {'b': 'c', 'c': 'd'}

output:

new_dict = {'a': ['a'], 'b': ['b', 'c'], 'c': ['d']}

我有以下代码哪个有效但我想知道是否有更有效的方法:

首先,我创建一个列表“unique_vals”,其中存储两个字典中存在的所有值。 由此,创建一个新字典,其中存储两个字典中存在的所有值

unique_vals = []
new_dict = {}
for key in list(d1.keys())+list(d2.keys()) :
    unique_vals = []
    try:
        for val in d1[key]:
            try:
                for val1 in d2[key]:
                    if(val1 == val) and (val1 not in unique_vals):
                        unique_vals.append(val)
            except:
                continue
    except:        
        new_dict[key] = unique_vals
    new_dict[key] = unique_vals

然后,对于两个字典中未在此新字典中列出的每个值,这些值将附加到新字典中。

for key in d1.keys():
      for val in d1[key]:
          if val not in new_dict[key]:
              new_dict[key].append(val)
for key in d2.keys():
    for val in d2[key]:
        if val not in new_dict[key]:
            new_dict[key].append(val)

也许与defaultdict?

>>> d1 = {'a': 'a', 'b': 'b'} 
>>> d2 = {'b': 'c', 'c': 'd'}
>>> from collections import defaultdict                                         
>>>                                                                             
>>> merged = defaultdict(list)                                                  
>>> dicts = [d1, d2]                                                            
>>> for d in dicts: 
...:     for key, value in d.items(): 
...:         merged[key].append(value) 
...:                                                                            
>>> merged                                                                      
defaultdict(list, {'a': ['a'], 'b': ['b', 'c'], 'c': ['d']})

这适用于任意数量的词典dicts list.

作为一个函数:

def merge_dicts(dicts):
    merged = defaultdict(list)

    for d in dicts:
        for key, value in d.items():
            merged[key].append(value)

    return merged
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较字典,更新而不覆盖值[重复] 的相关文章

随机推荐

  • IBM Blockchain Marble 演示中的交易存储在哪里?

    我正在运行下面链接中提到的 IBM 提供的区块链演示 https github com IBM Blockchain marbles https github com IBM Blockchain marbles 我在一个 Linux 系统
  • 如何从 Firestore 查询中排除元素?

    我有一个用户集合 我想从数据库中查询所有用户并将它们显示在RecyclerView除了一个 mine 这是我的数据库架构 users collection uid document uid fR5bih7SysccRu2Gu9990TeSS
  • 如何像对象一样操作Json响应?

    我的 jQuery ajax 返回 JSon 对象 我首先阅读了其他文章 但他们的回复文字不喜欢我的 我的回复内容 来自萤火虫响应 item country USA lan EN country Turkiye lan TR 现在我试图提醒
  • 通过内省打印 ctypes“Structure”的所有字段

    test c include
  • 在 XAML (WPF) 中将图标放入文本框中

    我想将一个小图标 一个 png 文件 放在文本框的一角 我的意思的草图位于http dosketch com view php k mIPeHLSBLx0e2YpoVpYO http dosketch com view php k mIPe
  • 创建自定义链轮处理器的文档?

    我正在尝试为 Rails 创建一个链轮预处理器 它会发现 png rb资产管道中的文件 并使用它们生成我的应用程序中各个页面的 png 屏幕截图 我已经阅读了很多关于这个主题的内容 但我似乎找不到任何关于如何进行此设置的简单文档 请帮助 这
  • 在 Active Record 中使用 find() 和多个 where 子句

    我想将 Active Record 查询后的内容 使用括号 分为 3 组 第一组是从第一个 Where 子句到最后一个 orWhere 第二个和第三个将使用 andWhere 请给我关于如何使用括号分隔所有 3 个部分的建议 query B
  • UICollectionView 不调用委托方法

    我已经设置了一个UICollectionView在故事板中并连接数据源和委托出口 我已经通过笔尖注册了一个单元格 我将其出队cellForItemAtIndexPath 方法 所有工作都完美地期望委托方法永远不会被调用 例如 当触摸一个单元
  • 如何在 Javascript 中实现应用模式

    Javascript 中引用函数调用模式的应用调用模式是什么 我该如何使用它 使用这种调用模式有什么好处 指某东西的用途apply与函数上下文相关 this关键字 和参数传递 首先 我想你应该知道在什么情况下this关键字是隐含地 set
  • 如何从 ~/.aws/config 加载配置

    变更日志 https github com aws aws sdk js blob master CHANGELOG md 2440 says Load config from aws config if AWS SDK LOAD CONF
  • ListField 在编辑/创建帖子中显示

    我正在一个项目中使用 Flask mongoengine 我正在尝试从中获取基本的东西http docs mongodb org manual tutorial write a tumblelog application with flas
  • 如何在MASM中为一个项目编写和组合多个源文件?

    对于组装来说还是个新手 玩起来很有趣 我想将程序的功能拆分到多个文件中 特别是通过将类似的功能分组在一起进行组织 这些其他文件将由主文件 甚至希望其他非主文件 调用 我还没有成功 希望得到帮助 我不使用 IDE 更喜欢使用 notepad
  • Excel VBA 用于匹配和排列行

    我有一个 Excel 文档 其中包含 A 到 J 列 K 到 N 列包含相关数据 但未对齐 我需要将 F 列中的值与 K 列中的值进行匹配 以便它们对齐 当我移动K时 我必须一起移动L M N 我无法对 A 到 J 列进行排序 它们必须保留
  • JWT 计算签名 SHA256withRSA

    我试图 使用 SHA256withRSA 对输入的 UTF 8 表示形式进行签名 也可以 称为带有 SHA 256 哈希函数的 RSASSA PKCS1 V1 5 SIGN 从API控制台获取的私钥 输出将是 字节数组 所以让我们将 Hea
  • Django Count 和 Sum 注释相互干扰

    在建设综合体的同时QuerySet通过几个注释 我遇到了一个可以通过以下简单设置重现的问题 以下是型号 class Player models Model name models CharField max length 200 class
  • WPF 工具包数据网格标头和空源

    如果没有可显示的行 如何使数据网格显示标题 我的数据网格是 完全 只读的 自动生成列 真 CanUserAddRows 假 CanUserDeleteRows 假 CanUserResizeRows 假 IsReadOnly 真 如果没有行
  • 将 int 数组转换为 char*

    这可能吗 我想将其转换为 char 以便稍后检索该值 Sure int array 4 1 2 3 4 char c reinterpret cast
  • Github/compare:如何比较两个不同的文件(不同的文件名,都在 HEAD 中)?

    我可以使用github吗 compare在HEAD中显示两个不同源文件之间的差异 这是我在命令行上执行此操作的方法git diff git diff HEAD docs tutorial 01 boxed function pointers
  • 预编译资产时出现“命令失败,状态为 ()”

    当我在生产环境中编译资源时 我和很多用户一样遇到了类似的问题 唯一的区别是我无法从跟踪中得到任何提示来解决问题 rake assets precompile RAILS ENV production trace Invoke assets
  • 比较字典,更新而不覆盖值[重复]

    这个问题在这里已经有答案了 I am not寻找这样的东西 如何将两个字典合并到一个表达式中 https stackoverflow com questions 38987 how do i merge two dictionaries i