将值从一个嵌套字典复制到另一个嵌套字典(当密钥对是sam时)

2024-06-09 03:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个嵌套字典:

d:
{'redFish': {'redFish': 'inf', 'blueFish': 9, 'twoFish': 10, 'oneFish': 6}, 
'blueFish': {'redFish': 9, 'blueFish': 'inf', 'twoFish': 11, 'oneFish': 10}, 
'twoFish': {'redFish': 10, 'blueFish': 11, 'twoFish': 'inf', 'oneFish': 8}, 
'oneFish': {'redFish': 6, 'blueFish': 10, 'twoFish': 8, 'oneFish': 'inf'}}

以及

newDict:
{'blueFish': {'blueFish': None, 'twoFish': None, ('redFish', 'oneFish'): None},
'twoFish': {'blueFish': None, 'twoFish': None, ('redFish', 'oneFish'): None},
('redFish', 'oneFish'): {'blueFish': None, 'twoFish': None, ('redFish', 'oneFish'): None}}

对于相同的键对,我想将值从d传输到newDict。对于这些字典,这些密钥对是

[blueFish][blueFish]
[blueFish][twoFish]
[twoFish][blueFish]
[twoFish][twoFish]

如果这起作用,那么d中这些键对的值将移动到newDict中的相同键对

我编写了这段代码来尝试这样做:

for name1 in newDict:
    for name2 in name1:
        for nameA in d:
            for nameB in d:
                if name1 == nameA and name2 == nameB:
                    newDict[name1][name2] = d[nameA][nameB]

但是,在newDict中没有任何更改,因为所有键对的所有值仍然是None。我如何修复这个问题,为什么我的代码不能工作


Tags: 代码innonefor字典infredfishname1
2条回答

您可以利用dictionarykeys的行为类似于集合这一事实。您可以通过以下方式找到两个词典的共同键:

d.keys() & newDict.keys()

这将为您提供一个可以迭代的集合:

{'blueFish', 'twoFish'}

您可以在内部dict中执行相同的操作,只更新公共值:

for k in d.keys() & newDict.keys():
    newDict[k].update((k2, d[k][k2]) for k2 in newDict[k].keys() & d[k].keys())

我认为在Python2中,您可以直接从dict生成一个集合,因此应该以相同的方式工作:

for k in set(d) & set(newDict):
    newDict[k].update((k2, d[k][k2]) for k2 in set(newDict[k]) & set(d[k]))

可以使用关键点的交点:

set(d.keys()) & set(newDict.keys())
# {'blueFish', 'twoFish'}
for k, v in d.iteritems():
    for i in set(newDict.get(k, {}).keys()) & set(v.keys()):
        newDict[k][i] = v[i]
print(newDict)
# {'blueFish': {'blueFish': 'inf', 'twoFish': 11, ('redFish', 'oneFish'): None}, 
#  'twoFish': {'blueFish': 11, 'twoFish': 'inf', ('redFish', 'oneFish'): None}, 
#  ('redFish', 'oneFish'): {'blueFish': None, 'twoFish': None, ('redFish', 'oneFish'): None}}

相关问题 更多 >