我正在尝试迭代两个字典 d = {'d': 2, 'c': 6, 'a': 1, 'b': 3} 和 d2 = {'j': 9, 'b': 5, 'a': 2, 'k': 10}。它应该存储像这样的值 [[key1, value1 value2], [key1, value1, value2], [key2, value1, value2]...] 首先,尝试将 d 值存储在 my_list 中作为 my_list = [d[keys], d[values], 0]。
我的代码如下,
my_list = []
for i, j in d.items():
if i in my_list:
print(i, "is in list")
else:
my_list.append([i,j,0])
output: my_list = [['d', 2, 0], ['c', 6, 0], ['a', 1, 0], ['b', 3, 0]]
然后,遍历 d2,如果 my_list 中存在 d2 的键,则将 0 替换为 d2[values] 否则将其添加到 my_list,如 [d2[keys], 0, d2[values]]。
当我检查 my_list 中的 'd' 时,它为我的 my_list 中的 'd' 提供了 .False 和 True[0 ][0]
因此,为了获得 my_list[0][0] 位置,我使用了另一个 for 循环,例如,
for k in range(len(d2)):
for i, j in d2.items():
if i in my_list[k][0]:
my_list[k][2] = d2[j]
else:
my_list.append([i,0,j])
这给了我错误,
Traceback (most recent call last):
File "<pyshell#505>", line 4, in <module>
my_list[k][2] = d2[j]
KeyError: 2
我在这里缺少什么?
谁能告诉我如何在不在列表中复制的情况下添加键及其值?
谢谢
请您参考如下方法:
您可以分三步形成结果。首先通过创建键的交集来创建一个包含存在于两个字典中的键的列表。然后添加仅存在于第一个字典中的键,最后添加仅存在于第二个字典中的键。
d = {'d': 2, 'c': 6, 'a': 1, 'b': 3}
d2 = {'d': 9, 'b': 5, 'a': 2, 'k': 10}
result = [[k, d[k], d2[k]] for k in d.keys() & d2.keys()]
result.extend([k, d[k], 0] for k in d if k not in d2)
result.extend([k, 0, d2[k]] for k in d2 if k not in d)
print(result)
输出:
[['b', 3, 5], ['d', 2, 9], ['a', 1, 2], ['c', 6, 0], ['k', 0, 10]]
你可以用 union 和 dict.get 来做到这一点还有:
>>> d = {'d': 2, 'c': 6, 'a': 1, 'b': 3}
>>> d2 = {'d': 9, 'b': 5, 'a': 2, 'k': 10}
>>> [[k, d.get(k, 0), d2.get(k, 0)] for k in d.keys() | d2.keys()]
[['k', 0, 10], ['c', 6, 0], ['d', 2, 9], ['a', 1, 2], ['b', 3, 5]]
正如@JimDennis 所指出的那样,自从在 Python 2 上以来,它仅适用于 Python 3 keys而是返回一个列表。这可以通过从返回值构造一个集合来缓解:
[[k, d.get(k, 0), d2.get(k, 0)] for k in set(d.iterkeys()) | set(d2.iterkeys())]
