python生成一个调用名称的函数来获取id#

2024-10-01 11:34:09 发布

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

抱歉,python新手,当我说getID('foo')时,尝试生成一个func,它将返回id#。在

info = {1:   {'desc': 'one',    'length': 1, 'id': 1,    'weight': '4',  'name': 'foo'}, 
       506:  {'desc': 'two',    'length': 2, 'id': 506,  'weight': '32', 'name': 'bar'}, 
       1156: {'desc': 'Three.', 'length': 3, 'id': 1156, 'weight': '64', 'name': 'too'}}

这是我所拥有的,但并没有得到我想要的。任何帮助都很好谢谢

^{2}$

Tags: nameinfoidfoobaronelengthdesc
3条回答
  1. ie_info与全局变量info不匹配。在
  2. 引用idv['id']
  3. 不需要迭代所有字典条目来检查name键,值。
    • 只需使用dict['name']dict['id']

>>> info = {1:   {'desc': 'one',    'length': 1, 'id': 1,    'weight': '4',  'name': 'foo'},
...        506:  {'desc': 'two',    'length': 2, 'id': 506,  'weight': '32', 'name': 'bar'},
...        1156: {'desc': 'Three.', 'length': 3, 'id': 1156, 'weight': '64', 'name': 'too'}}
>>>
>>>
>>> def GetID(name):
...     for v in info.values():
...         if v['name'] == name:
...             return(v['id'])
...     return 'wrong name'
...
>>> GetID('foo')
1
>>> GetID('who')
'wrong name'
def GetID(name):
    return [x['id'] for x in info.values() if x['name'] == name]

这就是为什么你不是在所有的钥匙上循环,而是只拿走你想要的那一个

使用正确的数据结构将使这一点变得容易得多,而且,假设您多次调用GetID,也会更快。(通常,当您发现从数据中提取所需信息太复杂时,答案通常是更改数据结构。)

如果您有一个字典,它将每个name映射到id,那么可以这样做:

def GetID(name):
    return name_to_id.get(name, "wrong name")

如果您以前从未见过d.get(key, default),那么它就相当于d[key],只是如果键不存在,您将得到default,而不是引发一个KeyError。在


那么,你怎么建那本字典呢?好吧,您已经知道如何显式地迭代现有的字典,所以让我们这样做:

^{pr2}$

如果你想让它更简洁:

name_to_id = {v['name']: v['id'] for v in info.values()}

不管怎样,您只需在字典上循环一次,以设置name_to_id映射,而不是每次需要查找名称时。这是一个更简单的循环。在

这意味着现在每个名字查找都非常简单,速度也非常快。在

相关问题 更多 >