我正在尝试创建一个函数,该函数接受一个数据列表并构造一个字典,该字典为每个 data[0]
条目创建一个键,其中包含一个对应值列表,这些值是指向初始键条目的链接。如果有多个链接,应该有重复的同一个值条目。
以下是所需输出的示例:
data = [("a", "b"),
("a", "b"),
("a", "c"),
("b", "c"),
("b", "a")]
data_to_dict(data)
# output
{"a" : ["b", "b", "c"], "b" : ["a", "c"]}
我编写了一些能够正确形成键的初始代码,但它只注册了最后一个键值对,而不是创建所有对的列表。
我的代码:
dict_data = {i[0]:[i[1]] for i in data}
print(dict_data)
# output
{'a': ['c'], 'b': ['a']}
任何帮助将不胜感激。
答案 0 :(得分:2)
当您有一个键的重复值时,您将覆盖这些值。您需要先添加列表,然后附加到它。您可以使用 defaultdict
或仅使用 setdefault()
from collections import defaultdict
d = defaultdict(list)
for k, v in data:
d[k].append(v)
print(d)
# defaultdict(list, {'a': ['b', 'b', 'c'], 'b': ['c', 'a']})
# defaultdicts work like a regular dict, but you
# convert if you need to for some reason
dict(d)
{'a': ['b', 'b', 'c'], 'b': ['c', 'a']}
与 setdefault()
交替使用:
d = {}
for k, v in data:
d.setdefault(k, []).append(v)
print(d)
#{'a': ['b', 'b', 'c'], 'b': ['c', 'a']}