我有一个有多个值的颜色词典:
dictcolors = {'Red': '1,2,3,4,5',
'Green': '3,4,5',
'Purple': '6',
'Orange': '7',
'Blue': '1,2,3',
'Teal': '3,4,5,6'}
Run Code Online (Sandbox Code Playgroud)
如何迭代所有值并返回值是其中一部分的值和键?
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'
Run Code Online (Sandbox Code Playgroud)
您可以使用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 )
Run Code Online (Sandbox Code Playgroud)
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'])})
Run Code Online (Sandbox Code Playgroud)
使用a的另一个好处defaultdict是,当访问不存在的数字时它不会破坏dictcolors.这是因为当您访问此类密钥时,它将通过空的"默认"类型(set在本例中为)来初始化密钥的值.
所以你可以毫无问题地做这样的事情:
for number in range(10):
print number,list(foundColors[number])
Run Code Online (Sandbox Code Playgroud)