以下是我的清单:
a = {'A':'red', 'B':'blue', 'C':'cyan'}
b = {'A':[1,1,2,4], 'B':[1,2,5]}
下面是我对字典进行反转的代码:
def again(dict):
tuple(value for value in dict)
result_dict = {}
for key, value in dict.items():
if not value in result_dict.keys():
result_dict[value] = []
result_dict[value].append(key)
return result_dict
该函数适用于标签为"a"的字典但不适用于字典。这是因为字典b具有不可哈希数据类型(即列表)。
运行函数:
again(a)
output --> {'red': ['A'], 'blue': ['B'], 'cyan': ['C']}
我想拿字典"b"并将其倒置,就像使用字典"a"一样,但我不知道如何使用多个整数来解释列表值,例如:
{'A' : [1, 1, 2, 4}, 'B' : [1, 2, 5]}
将返回:
{1 : ['A', 'B'], 2 : ['A', 'B'], 4 : ['A'], 5 : ['B']}
如果是列表,则需要另一个for循环来遍历该值。
def again(d):
result = dict()
for key, value in d.items():
if isinstance(value, list):
for num in value:
if not num in result:
result[num] = list()
if key not in result[num]:
result[num].append(key)
else:
if not value in result:
result[value] = list()
result[value].append(key)
return result
>>> again({'A':'red', 'B':'blue', 'C':'cyan'})
{'red': ['A'], 'blue': ['B'], 'cyan': ['C']}
>>> again({'A':[1,1,2,4], 'B':[1,2,5]})
{1: ['A', 'B'], 2: ['A', 'B'], 4: ['A'], 5: ['B']}
Usingdefaultdict与if - else检查字典值是否为列表的条件:
from collections import defaultdict
def again(d):
res = defaultdict(list)
for k,v in d.items():
if isinstance(v,list):
temp = list(set([(x,k) for x in v]))
for x,y in temp:
res[x].append(y)
else:
res[v].append(k)
return dict(res)
print(again({'A':'red', 'B':'blue', 'C':'cyan'}))
print(again({'A':[1,1,2,4], 'B':[1,2,5]}))
输出:
{'red': ['A'], 'blue': ['B'], 'cyan': ['C']}
{1: ['A', 'B'], 2: ['A', 'B'], 4: ['A'], 5: ['B']}