Python Dictionary多值

时间:2014-04-16 15:32:09

标签: python dictionary

我有一个包含多个值的颜色词典:

dictcolors = {'Red': '1,2,3,4,5',
              'Green': '3,4,5',
              'Purple': '6',
              'Orange': '7', 
              'Blue': '1,2,3',
              'Teal': '3,4,5,6'}

如何迭代所有值并返回该值所属的值和键?

Result:
Value - Key(s)

1 - 'Red', 'Blue'
2 - 'Red', 'Blue'
3 - 'Red', 'Green', 'Blue', 'Teal'
4 - 'Red', 'Green', 'Teal'
5 - 'Red', 'Green', 'Teal'
6 - 'Purple', 'Teal'
7 - 'Orange'

2 个答案:

答案 0 :(得分:7)

您可以使用defaultdict(可从py 2.6+获取):

from collections import defaultdict
foundColors = defaultdict(set)
for key,value in dictcolors.iteritems():
    # Assuming the numbers are in a comma separated string
    for color in value.split(','):
        foundColors[color].add( key )

foundColors给出:

>>defaultdict(<type 'set'>, {'1': set(['Blue', 'Red']), '3': set(['Blue', 'Green', 'Red', 'Teal']), '2': set(['Blue', 'Red']), '5': set(['Green', 'Red', 'Teal']), '4': set(['Green', 'Red', 'Teal']), '7': set(['Orange']), '6': set(['Purple', 'Teal'])})

使用defaultdict的另一个好处是,在访问dictcolors中不存在的数字时,它不会中断。这是因为当您访问此类密钥时,它会通过空的默认值初始化密钥的值。 type(在这种情况下为set)。

所以你可以毫无问题地做这样的事情:

for number in range(10):
    print number,list(foundColors[number])

答案 1 :(得分:-1)

尝试这样的事情:

integer count = 0;
for key in dictcolors.keys():{
    print '{0}'.format( str(count) ) + ' - '
    if (dictcolors[key].find(str(count)))
        print key