我必须在字典中反转键和值,但它没有考虑整个字符串,它会逐字逐句地考虑。
我的代码如下:
locat= {1: 'aa', 2: 'ab', 3: 'ba', 4: 'ab'}
location = {}
for e, char in locat.items():
location.setdefault(char, []).append(e)
我的结果是:
{'aa': [1, 1], 'ab': [2, 4, 2, 4], 'ba': [3]}
但我期待这个结果:
{'aa': [1], 'ab': [2, 4], 'ba':[3]}
提前谢谢。
此致
答案 0 :(得分:2)
试试这个:
c={}
dict = {1: 'aa', 2: 'ab', 3: 'ba', 4: 'ab'}
for e, char in dict.items():
c.setdefault(char, []).append(e)
print(c)
输出:
{'aa': [1], 'ab': [2, 4], 'ba': [3]}
或者
from collections import defaultdict
c = defaultdict(list)
dict = {1: 'aa', 2: 'ab', 3: 'ba', 4: 'ab'}
for e, char in dict.items():
c[char] += [e]
print(c)
输出:
defaultdict(<class 'list'>, {'aa': [1], 'ab': [2, 4], 'ba': [3]})
defaultdict to dict:
python3.x 您可以使用
import builtins
print(builtins.dict(c))
Python 2.x 试试这个:
import __builtin__
print(__builtin__.dict(c))
顺便说一句,不要将 dict 用作变量。
答案 1 :(得分:1)
你可以这样做:
location = {1: 'aa', 2: 'ab', 3: 'ba', 4: 'ab'}
location_new={}
for i,s in location.items():
if s in location_new:
location_new[s]+=[i]
else:
location_new[s]=[i]
print(location_new)
输出:
{'aa': [1], 'ab': [2, 4], 'ba': [3]}
余项:
不要将dict
或list
或任何其他类型用作变量,将稍后导致错误。
答案 2 :(得分:1)
)
我使用list comprehension {v:[k for k in dict if dict[k] == v] for v in dict.itervalues()}
来计算每个键的值