【问题标题】:Given list of dicts, an efficient way to print out keys once, then all values给定 dicts 列表,一种有效的方式来打印一次键,然后打印所有值
【发布时间】:2013-11-01 03:20:07
【问题描述】:

所以我有一个字典列表。我想打印出第一个字典的键(保证在每个字典中都是相同的),然后是它们的所有值(不是)。逻辑:

key1,key2,key3,...
dicts[0][key1],dicts[0][key2],dicts[0][key3],...
dicts[1][key1],dicts[1][key2],dicts[1][key3],...
...

输出:

last_modified,asset_id,asset_type,asset_name,status,annotation,error_id
2013-10-31 10:30:56,745844,VECTOR,Diameters,PROCESS_STOPPED,SYSTEM_ERROR,1376
2013-10-31 04:53:17,750686,VECTOR,bogus_data_1,PROCESS_STOPPED,SYSTEM_ERROR,1382
...

现在我正在这样做:

errors = GetErrorList()
print 'last_modified,asset_id,asset_type,asset_name,status,annotation,error_id'
for error in errors:
  print '%s,%s,%s,%s,%s,%s,%s' % (
    error['last_modified'], error['asset_id'], error['asset_type'],
    error['asset_name'], error['status'], error['annotation'], error['error_id']
  )

对密钥进行两次硬编码似乎效率低下且容易损坏,但输出顺序是固定的,所以我不能只转储errors[0].keys()。有没有更好/更 Pythonic 的方式来做到这一点?

【问题讨论】:

    标签: python list dictionary key


    【解决方案1】:
    keys = ('last_modified', 'asset_id', 'asset_type', 'asset_name', 'status', 'annotation', 'error_id')
    print ','.join(keys)
    for error in GetErrorList():
        print ','.join(str(error[key]) for key in keys)
    

    这会在值之间打印逗号,例如您想要的输出。您的程序会打印空格。

    如果您希望有空格,请将第二个 ',' 更改为 ' '

    【讨论】:

    • 壮观,就像所有好的解决方案一样,事后看来是显而易见的。谢谢!
    • 两个小调整:您在第一行末尾缺少一个 ),并且您需要 str(error[key]) 能够将非字符串值连接在一起。
    • 您的格式化字符串似乎表明它们都是字符串。
    • 是的,我的问题并不清楚,但是例如。 last_modified 是一个日期时间对象,它通过原始的%s 被转换成一个字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多