【问题标题】:How to access dictionary elements in a list in python如何在python中访问列表中的字典元素
【发布时间】:2014-03-14 02:04:11
【问题描述】:

我正在尝试了解 Python 中的字典和列表。

假设我有一个包含 3 个字典的列表 前任。 item_list = [price,stock,quantity]

价格、库存和数量是这里的字典。每个字典都有几个键值对,例如

price = {'toys':25,'clothes':[12,15,20]}

我知道要访问单个元素,我可以使用带有指定键的 for 循环:

for item in item_list:
        print item['toys']

如何在不直接提及 for 循环中的键的情况下访问元素?

【问题讨论】:

  • 你为什么要这样做?
  • 可以通过item.keys()获取key的列表
  • @Eenvincible - 我会将这些值输入到其他变量中。打印只是我给出的一个例子。所以不想硬编码密钥。

标签: python dictionary


【解决方案1】:

您可以像遍历列表一样遍历字典。

for item in item_list:
    for key in item:
        print item[key]

从某种意义上说,您仍然在提及键,但您并没有通过它们的值明确地引用它们。

如果您只对值感兴趣,可以使用 values() 方法:

for item in item_list:
    for key in item.values():
        print item[key]

不过,我首选的迭代字典的方法是使用项,它返回键值对的元组。

for item in item_list:
    for key, value in item.items():
        print key, value

【讨论】:

    【解决方案2】:

    我会这样做:

    for item in item_list:
      for key, value in item.iteritems():
        print key, value
    

    【讨论】:

      【解决方案3】:

      让我们说,你有一个这样的列表

      prices_list = [{'toys':25,'clothes':[12,15,20]},{'toys':35,'clothes':[12,15,20]}]
      

      并且您想获取与toys 对应的值,但没有在 for 循环中指定名称。所以,你可以像这样使用operator.itemgetter

      from operator import itemgetter
      getter = itemgetter("toys")
      print [getter(item) for item in prices_list]
      # [25, 35]
      

      同样可以这样使用

      total = 0
      for item in prices_list:
          total += getter(item)
      

      【讨论】:

        【解决方案4】:
        for d in item_list:
            for i in d.values():
               print i
        

        如果您想访问两者,也可以调用 d.items() 并取回 (key, value) 的元组。 此外,如果您不关心可读性,您可以使用它来获取列表中所有字典中所有值的列表。

        [x for y in (i.values() for i in item_list) for x in y]

        您还可以使用:[d for i in item_list for d in i.values()] 来获取值并将它们展平为一个列表(尽管您的值仍然是嵌套的,因为衣服的值是一个列表。

        最后,如果字典有不同的键,您可以将它们合并为一个:

        joint_mapping = dict([d for i in item_list for d in i.items()])
        

        或者如果它们没有唯一值,您可以使用下面的代码生成值列表的字典。 :

        for k, v in [d for i in item_list for d in i.items()]:
             new_d[k] = new_d.get(k, [])+[v]
        

        【讨论】:

          【解决方案5】:

          你提到了:

          @Eenvincible - 我会将这些值输入到其他变量中。 打印只是我给出的一个例子。所以不想硬编码密钥。

          我认为您可以使用其他答案中提到的 for 循环来完成您的技巧。

          for item in item_list:
              for key in item:
                  print item[key]
                  tempvariable = item[key]
                  .... do something here.
          

          如果要将每个值分配给单独的变量,您应该:

           - First, assign that variables to any insignificant value EX: **None** or *""*
           - Then,  dynamically use the for loop to reassign each variable to new value using if condition or thier index.
          

          前:

          price_toys , price_clothes , stock_toys , stock_clothes  = None , None , None , None
          for item in item_list:
               for key in item:
                     tempvariable = item[key]
                     # condition to choose which varible will be set to the current value.
                     if item == "price" and key == "toys":
                            price_toys  = tempvariable
                      # and so on 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-13
            • 2015-07-05
            • 2022-10-04
            • 2023-04-06
            • 2021-07-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多