我有一个字典,其中键是整数值,值是字符串列表。我想要将它反转,使得字符串成为键而整数成为值。
首先的设计:
{1:["a"], 2:["a","b"], 3:["a"], 4:["b", "cd"], 6:["a","cd"]}
第二个设计:
{"a": [1,2,3,6], "b":[2,4], "cd":[4,6]}
有什么线索吗?谢谢。
我有一个字典,其中键是整数值,值是字符串列表。我想要将它反转,使得字符串成为键而整数成为值。
首先的设计:
{1:["a"], 2:["a","b"], 3:["a"], 4:["b", "cd"], 6:["a","cd"]}
第二个设计:
{"a": [1,2,3,6], "b":[2,4], "cd":[4,6]}
defaultdict
,为新键提供一个空列表,然后对于当前字典中的每个列表,为每个元素创建一个键,并将原始字典键附加到新列表中:from collections import defaultdict
orig = {1: ['a'], 2: ['a', 'b'], 3: ['a'], 4: ['b', 'cd'], 6: ['a', 'cd']}
d = defaultdict(list)
for k, v in orig.items():
for string in v:
d[string].append(k)
# d = {'a': [1, 2, 3, 6], 'b': [2, 4], 'cd': [4, 6]}
出于对一行代码的热爱(注意:非常低效!):
d2 = {val: [key for key in d if val in d[key]] for lst in d.itervalues() for val in lst}
代码
first_map = {1: ["a"], 2: ["a", "b"], 3: ["a"], 4: ["b", "cd"], 6: ["a", "cd"]}
second_map = {}
for key, value in first_map.items():
for i in value:
if i in second_map:
second_map[i].append(key)
else:
second_map[i] = [key]
print(second_map)
z = {1:["a"], 2:["a","b"], 3:["a"], 4:["b", "cd"], 6:["a","cd"]}
d = dict()
for k, v in z.iteritems():
for i in v:
if i in d:
d[i].append(k)
else:
d[i] = [k]
使用iteritems()
代替items()
在Python 2中更好一些,因为前者创建了一个生成器。
iteritems
,因为OP指出了Python 2.7? - perigondict1= {1:["a"], 2:["a","b"], 3:["a"], 4:["b", "cd"], 6:["a","cd"]}
dict2= {}
for key, value in dict1.items():
for val in value:
if val in dict2:
dict2[val].append(key)
dict2[val]= list(set(dict2[val]))
else:
dict2[val]= [key]
from collections import defaultdict
second_dict = defaultdict(list)
for key, value in first_dict.items():
for item in value:
second_dict[item].append(key)