2014-04-16 110 views
4

我的色彩搭配多个值的字典:Python字典多值

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

你怎么能在所有值进行迭代,并返回值和键(S),该​​值的一部分吗?

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' 
+4

哪里是你的代码,到目前为止,恰恰什么是它的问题? – jonrsharpe

+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中不存在的号码。这是因为当你访问这样的密钥时,它将通过一个空的“默认”类型(在这种情况下是set)来初始化密钥的值。

所以,你可以做这样的事情不会有问题:

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

尝试是这样的:

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

你确定这是python吗? –

+0

对不起,我只是一个初学者在stackoverflow,我没有Python的GUI。这就是为什么我把这个例子作为一个想法。 –

+0

没关系。但为了将来的参考,你可能想运行你的代码来检查它是否正确。用python它确实很容易做到。 :) –