在字典中获取相应的值

2024-10-02 18:20:38 发布

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

Python noob在字典/列表中进行迭代时遇到困难,请耐心听我说:

字典列表:

l = 
[{'id': 1, 'name': 'cream'},
{'id': 2, 'name': 'sugar'},
{'id': 3, 'name': 'mint'}]

根据名称的值,我想从列表中选择相应id的值

例如,如果我选择“奶油”,我想要1。“糖”我想要2个,等等

简单的方法,最好是通过列表理解


Tags: 方法name名称id列表字典sugarmint
3条回答

如果我理解正确,您可能想:

def selection(list_of_dicts, name_value):
    for d in list_of_dicts:
        if d["name"] == name_value:
            return d["id"]
l = [{'id': 1, 'name': 'cream'},
     {'id': 2, 'name': 'sugar'},
     {'id': 3, 'name': 'mint'}]


input_name = input("name?")

result = [x["id"] for x in l if input_name == x["name"]]
print(result)

这将是相应的列表理解。我不认为理解是最好的方法,因为你不想要一个列表,但你要求它

我可能没有完整的图片,但在你的问题中,我看不到任何需要词典列表的东西。事实上,您拥有的结构允许一个项具有多个ID:

myList = [
    { 'id':   1, 'name': 'cream' },
    { 'id':   2, 'name': 'sugar' },   # duplicates
    { 'id': 999, 'name': 'sugar' },   #   here.
    { 'id':   3, 'name': 'mint'  }
]

如果您只需要将字符串映射到标识符,那么单个字典可以做到这一点:

lookup = {'cream': 1, 'sugar': 2, 'mint': 3}

然后您可以使用lookup['cream']来进行翻译


如果您确实需要您指定的特定数据结构,您可以使用如下内容:

[aDict['id'] for aDict in myList if aDict['name'] == 'cream']

要获取匹配项列表,您需要决定如果存在多个匹配项,应执行哪些操作,例如仅获取第一个匹配项:

def getIdFor(haystack, needle):
    matches = [aDict['id'] for aDict in haystack if aDict['name'] == needle]
    if len(matches) == 0: return None
    return matches[0]

相关问题 更多 >