将列表值与字典中的项进行比较

2024-09-28 23:45:41 发布

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

假设我有一个所有州的字典,缩写作为键,长名称作为值:

statesDict = {'AK': 'Alaska', 'AL': 'Alabama', 'AR': 'Arkansas',...}

我还有一个预先选定的州缩写列表:

statesAbbrv = ['AL', 'CA', 'CO', 'DE']

基于cleanStates列表中的项目,我想选择stateNames字典中state缩写键的值(长名称),并将它们放入一个新列表;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

Tags: in名称列表for字典arakal
3条回答
stateNames = [stateDict[k] for k in statesAbbrv if k in stateDict]

使用^{}。你知道吗

这是列表理解的典型工作:

stateNames = [statesDict.get(state, state) for state in statesAbbrv]
print(stateNames)
#['Alabama', 'CA', 'CO', 'DE']

请注意,如果由于某种原因某个州的缩写不在词典中,它将被用作州名称本身。你知道吗

在功能上,您可以将map2dict.get一起使用:

stateNames = list(map(statesDict.get, statesAbbrv))

如果找不到缩写匹配项,则会给出None。更严格的版本将产生KeyError

stateNames = list(map(statesDict.__getitem__, statesAbbrv))

后者类似于列表理解,因为[]是访问__getitem__的语法:

stateNames = [statesDict[i] for i in statesAbbrv]

如果希望在找不到键时提供回退,请使用带有dict.get的列表理解:

stateNames = [statesDict.get(i, 'Fallback State') for i in statesAbbrv]

函数程序设计是一种将计算看作是对数学函数的求值的程序设计。另见Functional programming vs Object Oriented programming。你知道吗

在python2.x中,显式的list转换是不必要的,因为map返回一个list。在python3中,map返回一个iterable,需要通过list耗尽它。你知道吗

相关问题 更多 >