【问题标题】:Converting Dictionary to List? [duplicate]将字典转换为列表? [复制]
【发布时间】:2010-12-13 08:34:26
【问题描述】:

我正在尝试将 Python 字典转换为 Python 列表,以便执行一些计算。

#My dictionary
dict = {}
dict['Capital']="London"
dict['Food']="Fish&Chips"
dict['2012']="Olympics"

#lists
temp = []
dictList = []

#My attempt:
for key, value in dict.iteritems():
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp) 
    aKey = ""
    aValue = ""

这是我的尝试……但我不知道出了什么问题?

【问题讨论】:

  • sum(dict.items(), ())
  • 请注意,在 Python 3 中,dict.items() dict.keys()dict.values() 返回一个 Dictionary object,它不支持索引,不是真正的列表。真实名单可通过list(dict.values())获取。

标签: python list dictionary


【解决方案1】:
dict.items()

成功了。

【讨论】:

  • 我知道这样做会有一些可笑的 Pythonic 方式,非常感谢。我只是觉得 Python 的文档很难阅读!
  • 他想要一个平面列表,items() 生成一个元组列表。
  • 要获取平面列表,请改用 dict.values()。
  • 当我尝试访问由dictlist=dict.items() 生成的列表时,尝试像列表一样访问它时遇到错误:dictlist[i][1]。 Python3 doc 说:~~~~ “dict.keys()、dict.values() 和 dict.items() 返回的对象是视图对象。它们提供了字典条目的动态视图,这意味着当字典变化,视图反映了这些变化。” ~~~~ 还需要一个步骤才能使其工作:---- [ (item[0],item[1]) for item in dict.items() ]
  • 对于python3使用list(dict.values())
【解决方案2】:

您的问题是 keyvalue 在引号中使它们成为字符串,即您将 aKey 设置为包含字符串 "key" 而不是变量 key 的值。此外,您并没有清除 temp 列表,因此您每次都添加到它,而不是只包含两个项目。

要修复您的代码,请尝试以下操作:

for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

在使用循环变量keyvalue 之前,您不需要将它们复制到另一个变量中,所以我将它们删除了。同样,您不需要使用 append 来构建列表,您只需在方括号之间指定它,如上所示。如果我们想尽可能简短,我们可以使用dictlist.append([key,value])

或者按照建议使用dict.items()

【讨论】:

  • 正确答案,因为解释了我做错了什么。如您所知,我对 Python 相当了解,非常感谢任何解释。干杯!
  • 如果您使用这样的附加列表,您将生成一个列表列表。他想要的是一个平面列表,您可以像在 Shay 的回答中那样使用 extend()。
  • 他从没这么说过,阿吉斯。列表列表是一个有效的 python 列表,并且比仅包含非列表值的平面列表更好地解释了“字典”。列表列表至少能够显示仍然组合在一起的键和值。
  • 上面写着'dict' object has no attribute 'iteritems'你能更新一下python 3.6的答案吗?
  • dict(iterable) -> new 字典初始化为通过:d = {} for k, v in iterable: d[k] = v 所以请使用items() 而不是'iteritems'
【解决方案3】:
 >>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
 >>> list(reduce(lambda x, y: x + y, a.items()))
 ['foo', 'bar', 'baz', 'quux', 'hello', 'world']

解释一下:a.items() 返回一个元组列表。将两个元组加在一起可以使一个元组包含所有元素。因此,归约会创建一个包含所有键和值的元组,然后 list(...) 会从中生成一个列表。

【讨论】:

  • 有趣...这种合并可能在某处有用。
  • 对于python 3.^,不要使用reduce,而是使用functools.reduce
【解决方案4】:

也许你只是想要这个:

dictList = dict.items()

您的方法有两个问题。对于一个你在引号中使用keyvalue 的人,它们是带有字母“key”和“value”的字符串,与该名称的变量无关。此外,您不断将元素添加到“临时”列表中,并且永远不会摆脱先前迭代中已经存在的旧元素。确保每次迭代都有一个新的空 temp 列表,并使用 keyvalue 变量:

for key, value in dict.iteritems():
    temp = []
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp)

另请注意,如果没有临时变量,这可以写得更短(在 Python 3 中使用items() 而不是iteritems()):

for key, value in dict.items():
    dictList.append([key, value])

【讨论】:

    【解决方案5】:

    你应该使用dict.items()

    这里有一个解决您问题的方法:

    [(k,v) for k,v in dict.items()]
    

    结果:

    [('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]
    

    或者你可以这样做

    l=[]
    [l.extend([k,v]) for k,v in dict.items()]
    

    为:

    ['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']
    

    【讨论】:

    • 至少在 python 2.6 中,你不需要 dict.items():[(k,v) for k,v in dict].
    • Python3.6 - [x for x in dict.items()] 做同样的事情。
    • 或只是list(dict.items())
    【解决方案6】:

    如果您制作字典只是为了制作元组列表,因为创建像您这样的字典可能会很痛苦,您可能会考虑使用 zip()

    如果您有一个标题和多行,它特别有用。例如,如果我假设您想要国家/地区的奥运会统计数据:

    headers = ['Capital', 'Food', 'Year']
    countries = [
        ['London', 'Fish & Chips', '2012'],
        ['Beijing', 'Noodles', '2008'],
    ]
    
    for olympics in countries:
        print zip(headers, olympics)
    

    给予

    [('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
    [('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]
    

    不知道这是否是最终目标,我的话题不在此列,但可能需要牢记。

    【讨论】:

      【解决方案7】:

      在 Python 中从 dict 转换为列表很容易。三个例子:

      >> d = {'a': 'Arthur', 'b': 'Belling'}
      
      >> d.items()
      [('a', 'Arthur'), ('b', 'Belling')]
      
      >> d.keys()
      ['a', 'b']
      
      >> d.values()
      ['Arthur', 'Belling']
      

      【讨论】:

      • 可以指定values()的顺序吗?标准字典的值的顺序是否已定义?
      • @MichaelScheper The order of standard dict is not specified 并且值的顺序可以与插入顺序不同。但是,可以sort the lists above 或使用 OrderedDict(参见第一个链接)。
      • 看来在Python3中,必须使用list(d.items())、list(d.keys())和list(d.values())
      • 我似乎总是以 dict_values 结尾在列表的每一行的开头。
      • @MichaelScheper 字典没有稳定的排序,如果您想按键排序,请使用[v for k, v in sorted(d.items(), key=lambda pair: pair[0])]。很遗憾 Python 没有为 lambdas 解包元组
      猜你喜欢
      • 2019-09-27
      • 2016-11-05
      • 2019-11-27
      • 2020-03-19
      • 2011-10-17
      • 2017-10-01
      • 2017-04-23
      • 2021-10-13
      相关资源
      最近更新 更多