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

python生成一个调用名称的函数来获取id#,python,dictionary,Python,Dictionary,很抱歉,python新手,当我说getID('foo')时,它试图生成一个func,它将返回id# 这是我所拥有的,但它不能满足我的需求。任何帮助都很好,谢谢 def GetID(name): for v in info.values(): for k in v.keys(): if k == name: return(v[id]) else: return

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

这是我所拥有的,但它不能满足我的需求。任何帮助都很好,谢谢

def GetID(name):

    for v in info.values():
        for k in v.keys():
            if k == name:
                return(v[id])
            else:
                return "wrong name"
这就是为什么你不是在所有的钥匙上循环,而是只取你想要的一个

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

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

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

  • ie_info
    与全局变量
    info
    不匹配
  • 引用
    id
    v['id']
    • 没有引号,
      id
      引用
  • 您不需要迭代所有字典条目来检查
    name
    key,value。
    • 只需使用
      dict['name']
      dict['id']

  • ie_info
    与全局变量
    info
    不匹配
  • 引用
    id
    v['id']
    • 没有引号,
      id
      引用
  • 您不需要迭代所有字典条目来检查
    name
    key,value。
    • 只需使用
      dict['name']
      dict['id']

  • ie_info
    与全局变量
    info
    不匹配
  • 引用
    id
    v['id']
    • 没有引号,
      id
      引用
  • 您不需要迭代所有字典条目来检查
    name
    key,value。
    • 只需使用
      dict['name']
      dict['id']

  • ie_info
    与全局变量
    info
    不匹配
  • 引用
    id
    v['id']
    • 没有引号,
      id
      引用
  • 您不需要迭代所有字典条目来检查
    name
    key,value。
    • 只需使用
      dict['name']
      dict['id']


  • 我会在一个生成你想要的东西的生成器上调用
    next
    ;如果生成器耗尽而未产生结果,则可以指定“默认”值:

    next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
    Out[22]: 1
    
    next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
    Out[23]: 'wrong name'
    

    (在这里使用Python3语法,使用
    iteritems
    而不是Python2中的
    items

    我会在生成所需内容的生成器上调用
    next
    ;如果生成器耗尽而未产生结果,则可以指定“默认”值:

    next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
    Out[22]: 1
    
    next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
    Out[23]: 'wrong name'
    

    (在这里使用Python3语法,使用
    iteritems
    而不是Python2中的
    items

    我会在生成所需内容的生成器上调用
    next
    ;如果生成器耗尽而未产生结果,则可以指定“默认”值:

    next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
    Out[22]: 1
    
    next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
    Out[23]: 'wrong name'
    

    (在这里使用Python3语法,使用
    iteritems
    而不是Python2中的
    items

    我会在生成所需内容的生成器上调用
    next
    ;如果生成器耗尽而未产生结果,则可以指定“默认”值:

    next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
    Out[22]: 1
    
    next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
    Out[23]: 'wrong name'
    

    (在这里使用Python3语法,使用
    iteritems
    而不是Python2中的
    items

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

    如果您有一个将每个
    名称
    映射到
    id
    的字典,您可以这样做:

    def GetID(name):
        return name_to_id.get(name, "wrong name")
    
    如果您以前从未见过
    d.get(key,default)
    ,则它相当于
    d[key]
    ,但如果该键不存在,您将获得
    default
    ,而不是引发
    KeyError


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

    name_to_id = {}
    for v in info.values():
        name_to_id[v['name']] = v['id']
    
    如果要使其更简洁,请执行以下操作:

    name_to_id = {v['name']: v['id'] for v in info.values()}
    
    无论哪种方式,您只需在字典上循环一次,设置
    name\u-to\u-id
    映射,而不是每次需要查找名称时。这是一个更简单的循环


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

    使用正确的数据结构将使查找更加容易,并且,假设您多次调用
    GetID
    ,也会更快。(通常,当您发现从数据中提取所需信息过于复杂时,答案通常是更改数据结构。)

    如果您有一个将每个
    名称
    映射到
    id
    的字典,您可以这样做:

    def GetID(name):
        return name_to_id.get(name, "wrong name")
    
    如果您以前从未见过
    d.get(key,default)
    ,则它相当于
    d[key]
    ,但如果该键不存在,您将获得
    default
    ,而不是引发
    KeyError


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

    name_to_id = {}
    for v in info.values():
        name_to_id[v['name']] = v['id']
    
    如果要使其更简洁,请执行以下操作:

    name_to_id = {v['name']: v['id'] for v in info.values()}
    
    无论哪种方式,您只需在字典上循环一次,设置
    name\u-to\u-id
    映射,而不是每次需要查找名称时。这是一个更简单的循环


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

    使用正确的数据结构将使查找更加容易,并且,假设您多次调用
    GetID
    ,也会更快。(通常,当您发现从数据中提取所需信息过于复杂时,答案通常是更改数据结构。)

    如果您有一个将每个
    名称
    映射到
    id
    的字典,您可以这样做:

    def GetID(name):
        return name_to_id.get(name, "wrong name")
    
    如果您以前从未见过
    d.get(key,default)
    ,它相当于
    d[key]
    ,除了