【问题标题】:Troubles iterating through list in python在python中遍历列表的麻烦
【发布时间】:2013-06-26 15:04:03
【问题描述】:

在 python 中,我有一个名为“list”的列表,如下所示:

[{'lastname': 'lname1', 'firstname': 'fname1', 'shortname': 'SN1'},
{'lastname': 'lname2', 'firstname': 'fname2', 'shortname': 'SN2'},
{'lastname': 'lname3', 'firstname': 'fname3', 'shortname': 'SN3'}]

我需要能够访问列表中每个项目的每个属性。所以我必须获取每个用户的姓氏、每个用户的名字等

由于这是一个列表,我一直在尝试这样做:

for idx in enumerate(list):
        print(list[idx])

但我收到一条错误消息,提示列表索引必须是整数,而不是元组。

所以试试这个:

for idx in enumerate(list):
        print(idx)

我得到这样的输出:

(0, {'lastname': 'lname1', 'firstname': 'fname1', 'shortname': 'SN1'})
(1, {'lastname': 'lname2', 'firstname': 'fname2', 'shortname': 'SN2'})
(2, {'lastname': 'lname3', 'firstname': 'fname3', 'shortname': 'SN3'})

我想要的只是能够获取索引,这样我就可以遍历每个列表项并说

firstname = list[idx]["firstname"]
lastname = list[idx]["lastname"]

等等。

注意:如果我说类似

print(list[0]["firstname"]) 

效果很好。

我做错了什么?或者我需要做什么?谢谢!

【问题讨论】:

  • 请不要将您的列表命名为 list,因为这会掩盖 Python 中的文字。
  • 我一定会改变的!
  • 使用枚举的更好方法是:for idx, item in enumerate(list):

标签: python json list loops enumerate


【解决方案1】:
for item in list:
    item['firstname']

尽管在列表中使用名称 list 是个坏主意,因为这已经是 Python 标准库中列表的构造函数的名称。

enumerate 在您需要列表中项目的索引时很有用。它会生成一个tuple,其中包含项目的索引和项目本身(正如您自己所经历的那样)。

【讨论】:

    【解决方案2】:

    与 JavaScript 不同,在 Python 中对序列进行迭代会产生元素,而不是索引。

    print idx['lastname']
    

    【讨论】:

      【解决方案3】:

      列表索引是整数。

      >>> x = ['test','test2','test3']
      >>> x[1]
      'test2'
      

      你有一个列表字典。所以你需要做的是遍历列表和字典。像这样:

      >>> x = [{'cat':'lol'},{'tigers':'lions'}]
      >>> for z in x:
      ...  for d in z:
      ...   print z[d]
      ...
      lol
      lions
      

      所以如果你只想要名字:

      for d in list:
       print d['firstname']
      

      【讨论】:

        【解决方案4】:

        你不需要enumerate,当你需要元素的索引时使用它,你不需要在这里..

        你似乎想做的是:

        for di in mylist: # for .. in ... : Iterates over the contents of ...
           for elem in di:
              print elem,':', di[elem]
        

        for di in mylist:
            print di['firstname'], di['lastname']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多