我无法在其他地方找到如何做到这一点,但它可能很简单。我正在尝试将与{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}
答案 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'])"}