【问题标题】:Ordered dictionary output in pythonpython中的有序字典输出
【发布时间】:2014-05-14 16:15:09
【问题描述】:

我有以下字典:

{'key1': 'list1', 'key2': 'list2', and so on}

我想打印出来,按以下顺序输出成csv文件:

key1 list1_element_1
key1 list1_element_2
key1 list1_element_n
key2 list2_element_1
key2 list2_element_n

我该怎么做?这可能(很可能)是一个基本问题,但是我找不到答案。谢谢。

【问题讨论】:

  • 字典不能这样看,key1 只能存储一个值。你的值列表,元组可能吗?你有没有尝试过?
  • 哇,对不起。值确实是列表。因此,对于每个键,都有一个对应的字符串列表。是否有可能从这个结构中获得我需要的输出?
  • “有序”是什么意思?你需要什么顺序的结果?字典键是无序的。

标签: python dictionary output


【解决方案1】:

假设您的值是列表/元组,您可以执行以下操作并且您正在使用 OrderedDict

dictionary = {'key1': ['value1', 'value2', 'value3'], 'key2': ['value1', 'value2']}

for key, values in dictionary.items():
   for value in values:
       print '{} {}'.format(key, value)

如果您使用的是普通字典(即不是OrderedDict),那么您需要先排序:

dictionary = {'key1': ['value1', 'value2', 'value3'], 'key2': ['value1', 'value2']}

for key, values in sorted(dictionary.items()):
   for value in values:
       print '{} {}'.format(key, value)

上面的代码只打印您在示例输出中的值。您可以将它们写入 csv 文件或做任何您想做的事情。

第二个例子的输出是:

key1 value1
key1 value2
key1 value3
key2 value1
key2 value2

【讨论】:

  • 你错过了一个键有多个值的事实!
  • 这将产生任意顺序的键,因为字典没有排序。
  • 他说这是一个“有序字典”(我假设是 OrderedDict)
  • 嗯,这是一种阅读方式。我读起来就像“我如何让它有序”......虽然使用orderedDict不太适合这个问题的水平。
  • 啊,很公平,我不是那样读的,但现在你这么说,我是这样读的:D
【解决方案2】:

这里有两个与您的问题相关的概念。

  1. 如何存储多字典
  2. 如何存储有序字典

对于第一个问题,您只需为每个键存储一个值列表,而不是单个值 对于第二个问题,您可以使用collections 库中的OrderedDict

import collections

def add_value(d, key, value):
    # get a list of values by key or set a default empty list
    lst = d.setdefault(key, list())
    lst.append(value)

def print_dict(d):
    for key, values in d.items():
        for single in values:
            print "{} {}".format(key, single)


d = collections.OrderedDict()
add_value(d, "key1", "value1")
add_value(d, "key1", "value2")
add_value(d, "key1", "valueN")
add_value(d, "key2", "value1")
add_value(d, "key2", "value2")
print_dict(d)

【讨论】:

  • 注意:OrderedDict 的顺序是插入顺序,不是排序顺序。这意味着您添加密钥的顺序很重要。这就是为什么 Samy Arous 没有将字典声明为 dict-literal。
【解决方案3】:

首先,一个键不能有多个关联的值。

假设单个键/值对,示例代码将是

info = {
"key1":"xyz",
"key4":"anotherrandom",
"key2":"abaadfas",
"key3":"random"
      }
for key in sorted(info):
        print "key: {} and value: {}".format(key,info[key])

如果您想将多个值与键关联,您可以使用列表。

info = {
"key1": [1,2,3],
"key4": [1],
"key2": [5,7,8],
"key3": [0,11,7,8]

}
for key in sorted(info):
    print "key: {} and value: {}".format(key,info[key])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    相关资源
    最近更新 更多