如果键在没有导入的情况下多次出现,如何更新 python 字典中的值?

How to update a value in python dictionary if the key appears multiple times without importing?

假设我有一个元组列表,其中多次出现相同的键。我想将它们转换成字典,但我不希望键重复或覆盖以前的键。我想在不导入包的情况下进行。

[("John", 14), ("Bob", 5), ("John", 21)]

turn it into:

{"John": [14, 21],
"Bob": [5]}

尝试使用 collections.defaultdict:

from collections import defaultdict
yourlist = [("John", 14), ("Bob", 5), ("John", 21)]
d = defaultdict(list)
for k, v in yourlist:
    d[k].append(v)
print(d)

输出:

defaultdict(<class 'list'>, {'John': [14, 21], 'Bob': [5]})

要使其成为真正的 dictionary,请添加此行:

d = dict(d)

然后:

print(d)

会给:

{'John': [14, 21], 'Bob': [5]}

编辑:

正如 OP 在评论中提到的,他不想使用任何导入。所以尝试:

yourlist = [("John", 14), ("Bob", 5), ("John", 21)]
d = {}
for x, y in yourlist:
    if x in d:
        d[x].append(y)
    else:
        d[x] = [y]
print(d)

输出:

{'John': [14, 21], 'Bob': [5]}

正如nike会说的那样...就去做吧:

my_dict = {}
for item in list_of_tuples:
    if item[0] not in my_dict.keys():
        my_dict[item[0]] = [item[1]]
    else:
        my_dict[item[0]].append(item[1])

这将确保不在字典中的任何键都获得分配给它们的列表值

您需要成员检查,因为您将通过 .append() 添加值,这是 NoneType 没有的方法,因此如果您尝试创建 key/value直接配对

你可以通过简单的(如果不是最佳的)理解来做到这一点:

>>> data = [("John", 14), ("Bob", 5), ("John", 21)]
>>> {name: [v for k, v in data if k == name] for name, _ in data}
{'John': [14, 21], 'Bob': [5]}