Python 将列表值与字典中的项进行比较
假设我有一个包含所有州缩写的字典作为键,长名称作为值:Python 将列表值与字典中的项进行比较,python,python-2.7,list,dictionary,list-comprehension,Python,Python 2.7,List,Dictionary,List Comprehension,假设我有一个包含所有州缩写的字典作为键,长名称作为值: statesDict = {'AK': 'Alaska', 'AL': 'Alabama', 'AR': 'Arkansas',...} 我还有一个预选州缩写的列表: statesAbbrv = ['AL', 'CA', 'CO', 'DE'] 基于cleanStates列表中的项目,我想选择stateNames字典中状态缩写键的值(长名称),并将它们放入新列表中;stateNames=[] 因此,比较结果如下所示: stateName
statesDict = {'AK': 'Alaska', 'AL': 'Alabama', 'AR': 'Arkansas',...}
我还有一个预选州缩写的列表:
statesAbbrv = ['AL', 'CA', 'CO', 'DE']
基于cleanStates列表中的项目,我想选择stateNames字典中状态缩写键的值(长名称),并将它们放入新列表中;stateNames=[]
因此,比较结果如下所示:
stateNames = ['Alabama', 'California', 'Colorado', 'Deleware']
我在想下面的问题,但它不起作用。我做错了什么
stateNames = []
for i in statesAbbrv:
for k, v in statesDict:
if stateDict[k] == stateAbbrv[i]:
stateNames.append(stateDict(k))
print stateNames
使用
您需要添加
iteritems()
,以使词典在python 2.7上可供使用。这是理解列表的典型工作:
stateNames = [statesDict.get(state, state) for state in statesAbbrv]
print(stateNames)
#['Alabama', 'CA', 'CO', 'DE']
请注意,如果由于某种原因某个州的缩写不在词典中,它将被用作州名称本身。遍历列表
statesabrv
,并在statesDict
中查找值
statesNames = [statesDict[n] for n in statesAbbrv]
功能1,您可以将map
2与dict.get
一起使用:
stateNames = list(map(statesDict.get, statesAbbrv))
stateNames = [statesDict.get(i, 'Fallback State') for i in statesAbbrv]
如果没有找到与缩写词匹配的词,则将给出None
。更严格的版本将产生键错误
:
stateNames = list(map(statesDict.__getitem__, statesAbbrv))
后者类似于列表理解,因为[]
是访问\uuu getitem\uuu
的语法:
stateNames = [statesDict[i] for i in statesAbbrv]
如果您希望在找不到密钥时提供回退,请使用带有dict.get
的列表理解:
stateNames = list(map(statesDict.get, statesAbbrv))
stateNames = [statesDict.get(i, 'Fallback State') for i in statesAbbrv]
函数式编程是一种编程风格,它将计算视为对数学函数的评估。另见
2在Python2.x中,不需要显式的
list
转换,因为map
返回一个list
。在Python3中,map
返回一个iterable,需要通过list
在您的问题中出现严重的打字错误来耗尽它。好的,下面是答案(在删除您自己代码中的错误之后):
对于i statebrv:
这是Python代码吗?你的意思是“我在州”的“我在州”的“我在州”的意思是:
你在
中缺少“是的,我只是忘记了“在”。抱歉。此解决方案与原始代码最为一致,但对于应直接解决的问题而言,效率极低且冗长。在评论或否决之前,请仔细阅读OP提出的问题。他/她说:“我在这里做错了什么?”。所以在你投票之前,确保你了解OP想要什么。我的回答是告诉他/她他做错了什么。显然,OP似乎是个初学者。因此,最好是教他/她解决方案中出现了什么问题。我完全同意,但除此之外,还应该包括正确的做事方式——要点是,如果每个人都开始发布新的“不那么简单”的解决方案,初学者将如何学习并了解错误的来源。我想做一些不同的事情,而不是发布复杂(但更有效)的解决方案。如果这一点得到了理解,我会要求你们本着我辩护的精神重新投票。如果这是一个论点,那么这份清单的理解是相当可读的。我认为这很复杂。也因此不允许将其移除。这是最简单和最直接的解决方案。我将复习列表理解,使其更加明显。谢谢大家。
statesDict = {'AK': 'Alaska', 'AL': 'Alabama', 'AR': 'Arkansas'}
statesAbbrv = ['AL', 'AK']
stateNames = []
for i in statesAbbrv:
for k in statesDict.keys():
if k == i:
stateNames.append(statesDict[k])
print (stateNames)
stateNames = [statesDict.get(i) for i in statesAbbrv]