大家好,
我正在尝试使用以下内容将长度为 2 的项目列表转换为字典:
my_list = ["b4", "c3", "c5"]
my_dict = {key: value for (key, value) in my_list}
Run Code Online (Sandbox Code Playgroud)
问题是当列表中出现多个键时,只保留最后一个键及其值。
所以在这种情况下,而不是
my_dict = {'c': '3', 'c': '5', 'b': '4'}
Run Code Online (Sandbox Code Playgroud)
我得到
my_dict = {'c': '5', 'b': '4'}
Run Code Online (Sandbox Code Playgroud)
即使有重复的键,我如何保留所有键:值对。谢谢
对于字典中的一个键,您只能存储一个值。
您可以选择将该值作为列表。
{'b': ['4'], 'c': ['3', '5']}
Run Code Online (Sandbox Code Playgroud)
以下代码将为您做到这一点:
new_dict = {}
for (key, value) in my_list:
if key in new_dict:
new_dict[key].append(value)
else:
new_dict[key] = [value]
print(new_dict)
# output: {'b': ['4'], 'c': ['3', '5']}
Run Code Online (Sandbox Code Playgroud)
可以做同样的事情setdefault
。感谢@Aadit M Shah 指出
new_dict = {}
for (key, value) in my_list:
new_dict.setdefault(key, []).append(value)
print(new_dict)
# output: {'b': ['4'], 'c': ['3', '5']}
Run Code Online (Sandbox Code Playgroud)
可以做同样的事情defaultdict
。感谢@MMF 指出。
from collections import defaultdict
new_dict = defaultdict(list)
for (key, value) in my_list:
new_dict[key].append(value)
print(new_dict)
# output: defaultdict(<class 'list'>, {'b': ['4'], 'c': ['3', '5']})
Run Code Online (Sandbox Code Playgroud)
您还可以选择将值存储为字典列表:
[{'b': '4'}, {'c': '3'}, {'c': '5'}]
Run Code Online (Sandbox Code Playgroud)
以下代码将为您做到这一点
new_list = [{key: value} for (key, value) in my_list]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7814 次 |
最近记录: |