将嵌套列表数据转换为字典

时间:2021-07-13 01:34:29

标签: python list dictionary

我正在尝试创建一个函数,该函数接受一个数据列表并构造一个字典,该字典为每个 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']}

任何帮助将不胜感激。

1 个答案:

答案 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']}