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]