Python:字典中的反向键和值考虑字符串而不是字符

时间:2017-03-22 09:43:34

标签: python dictionary

我必须在字典中反转键和值,但它没有考虑整个字符串,它会逐字逐句地考虑。

我的代码如下:

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]}

提前谢谢。

此致

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]}

余项: 不要将dictlist或任何其他类型用作变量,稍后导致错误。

答案 2 :(得分:1)

使用dict comprehension

)

我使用list comprehension {v:[k for k in dict if dict[k] == v] for v in dict.itervalues()} 来计算每个键的值