如果键在没有导入的情况下多次出现,如何更新 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]})
要使其成为真正的 dict
ionary,请添加此行:
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]}
假设我有一个元组列表,其中多次出现相同的键。我想将它们转换成字典,但我不希望键重复或覆盖以前的键。我想在不导入包的情况下进行。
[("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]})
要使其成为真正的 dict
ionary,请添加此行:
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]}