字典理解查询

时间:2014-09-19 14:25:42

标签: python dictionary

我无法在其他地方找到如何做到这一点,但它可能很简单。我正在尝试将与{d} value相关联的strings大写,但我目前只能对实际的key本身进行宣传。

strings = {"1234":{'a'}, "2":{'as'}, "4":{'bat'}, "5":{'car'}, "6":{'dove'}, "7":{'python'}}

我知道这不对:

d = {key:key.upper() for key in strings}

这导致错误,因为我试图解包太多变量:

d = {key:value.upper() for (key,value) in strings}

3 个答案:

答案 0 :(得分:4)

你的价值观是一套,是你想要的吗?

你可以将它们设置为非集合并将它们作为字符串然后使用iteritems:

strings = {"1234":'a', "2":'as', "4":'bat', "5":'car', "6":'dove', "7":'python'}

{key: value.upper() for key, value in strings.iteritems()}

或者,如果它们必须是集合,则需要一个迭代的迭代层

strings = {"1234":{'a'}, "2":{'as'}, "4":{'bat'}, "5":{'car'}, "6":{'dove'}, "7":{'python'}}

{key: {val.upper() for val in value} for key, value in strings.iteritems()}

答案 1 :(得分:2)

您的第二次尝试是在正确的轨道上,但您有两个问题:同时迭代键和值,您需要items()方法;而且你不能仅通过调用它上的upper来大写集合的所有元素。你需要在dict理解中嵌套一个集合理解。

strings = {"1234":{'a'}, "2":{'as'}, "4":{'bat'}, "5":{'car'}, "6":{'dove'}, "7":{'python'}}

d = {key:{item.upper() for item in value} for (key,value) in strings.items()}
print d

结果:

{'1234': set(['A']), '2': set(['AS']), '5': set(['CAR']), '4': set(['BAT']), '7': set(['PYTHON']), '6': set(['DOVE'])}

答案 2 :(得分:0)

由于您的值set对象使用str将它们转换为字符串,因此您可以使用upper方法:

>>> {key: str(value).upper() for key, value in strings.items()}
{'1234': "SET(['A'])", '2': "SET(['AS'])", '5': "SET(['CAR'])", '4': "SET(['BAT'])", '7': "SET(['PYTHON'])", '6': "SET(['DOVE'])"}