词典理解查询

2024-03-29 00:15:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在其他地方找不到这个方法,但可能很简单。我试图将与dict strings相关的value资本化,但目前只能将实际的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}

Tags: 方法keyinforvalueas地方错误
3条回答

由于您的值是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'])"}

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

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'])}

你的价值观是固定的,这就是你想要的吗?你知道吗

您可以将它们设为非集,并将它们作为字符串,然后使用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()}

相关问题 更多 >