【问题标题】:Python Accessing Values in A List of DictionariesPython 访问字典列表中的值
【发布时间】:2013-06-14 22:03:50
【问题描述】:

假设我有一个包含姓名、年龄和其他信息的字典列表,如下所示:

thisismylist= [  
              {'Name': 'Albert' , 'Age': 16},
              {'Name': 'Suzy', 'Age': 17},
              {'Name': 'Johnny', 'Age': 13}
]

我将如何使用 for 循环打印以下内容:

Albert
Suzy
Johnny

我无法理解这个想法......

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    如果您只是在寻找与“名称”相关的值,您的代码应如下所示:

    for d in thisismylist:
        print d['Name']
    

    【讨论】:

      【解决方案2】:

      如果您想要这些值的列表:

      >>> [d['Name'] for d in thisismylist]
      ['Albert', 'Suzy', 'Johnny']
      

      同样的方法,可以得到一个元组的数据:

      >>> [(d['Name'],d['Age']) for d in thisismylist]
      [('Albert', 16), ('Suzy', 17), ('Johnny', 13)]
      

      或者,将字典列表转换为单个键值对字典:

      >>> {d['Name']:d['Age'] for d in thisismylist}
      {'Johnny': 13, 'Albert': 16, 'Suzy': 17}
      

      所以,同样的方法,一种打印它们的方法:

      >>> print '\n'.join(d['Name'] for d in thisismylist)
      Albert
      Suzy
      Johnny   
      

      如果你愿意,你可以打印它:

      >>> print '\n'.join(sorted(d['Name'] for d in thisismylist))
      Albert
      Johnny
      Suzy
      

      或者,在展平列表时按年龄排序:

      >>> for name, age in sorted([(d['Name'],d['Age']) for d in thisismylist],key=lambda t:t[1]):
      ...    print '{}: {}'.format(name,age)
      ... 
      Johnny: 13
      Albert: 16
      Suzy: 17
      

      【讨论】:

        【解决方案3】:

        看来您需要查看Python flow-control documentation。基本上,您只需遍历列表中的所有项目,然后对于每个项目(在本例中为字典),您可以访问您想要的任何值。例如,下面的代码将打印出列表中每个字典中的每个值。

        for d in my_list:
            for key in d:
                print d[key]
        

        请注意,这不会打印键,只会打印值。要同时打印密钥,请编写您的打印声明print key, d[key]。就这么简单!

        但是真的,去阅读流控制文档吧;非常好。

        【讨论】:

          【解决方案4】:

          以下代码应该可以完美运行。

          for var in thisismylist:
            print var['Name']
          

          【讨论】:

          【解决方案5】:

          您可以将Name 属性投影到列表中的每个元素之外,并使用换行符连接结果:

          >>> print '\n'.join(x['Name'] for x in thisismylist)
          Albert
          Suzy
          Johnny
          

          编辑

          我花了几分钟,但我记得另一种有趣的方法。您也可以使用itertoolsoperator 模块的组合来执行此操作。你可以see it on repl.it too

          >>> from itertools import imap
          >>> from operator import itemgetter
          >>> print '\n'.join(imap(itemgetter('Name'), thisismylist))
          Albert
          Suzy
          Johnny
          

          在任何情况下,您最好使用普通的 for 循环,但我认为其他一些选项也可以。

          【讨论】:

            【解决方案6】:

            在不导入库的情况下执行此操作的速记方法:

            print('\n'.join([e["Name"] for e in thisismylist]))
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-13
              • 2017-08-12
              • 2021-08-04
              相关资源
              最近更新 更多