【问题标题】:dictionary in a list comprehension列表理解中的字典
【发布时间】:2018-07-11 20:33:53
【问题描述】:

我试图尽可能地压缩下面的代码,并尽可能像 Python 一样,感谢建议。

#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python
import yaml

FILE='t'

with open(FILE, 'r') as F:
    doc = yaml.load(F)

compr = [x for x in doc]

for x in doc:
    for k,v in x.items():
        print "\n"
        print k
        for k2,v2 in v.items():
            print k2,
            for b in v2:
                print b,

doc 的输出如下所示:

[{'UK': {'City': [1, 2, 3]}}, {'France': {'City': [1, 2]}}, {'US': {'City': [1, 2, 3]}}]

我的预期输出如下:

UK
City 1 2 3
France
City 1 2
US
City 1 2 3

【问题讨论】:

  • 你在问什么?这段代码是 Pythonic。把它放在一个列表理解中会使它不是pythonic,除非你不是想创建一个列表,但是AFAIKT你只是想打印一些东西(你不应该在列表中做理解,因为列表理解是用于创建列表,而不是用于副作用)。说到不必要的列表理解,compr = [x for x in doc] -> compr = list(doc)

标签: python python-2.7 dictionary


【解决方案1】:

也许您可以尝试解压缩 print 中的值,但您可能需要为 python2 导入 print_function,如其他 answer 中所述:

from __future__ import print_function
doc = [{'UK': {'City': [1, 2, 3]}}, {'France': {'City': [1, 2]}}, {'US': {'City': [1, 2, 3]}}]

for element in doc:
    for k1, v1 in element.items():
        print(k1)
        print(*v1, ' '.join(map(str,*v1.values())), sep=' ')

【讨论】:

    【解决方案2】:

    你可以试试这个:

    doc = [{'UK': {'City': [1, 2, 3]}}, {'France': {'City': [1, 2]}}, {'US': {'City': [1, 2, 3]}}]
    
    for dic in doc:
        for country, data in dic.items():
            print(country)
            for city, numbers in data.items():
                print(' '.join([city] + list(map(str, numbers))))
    

    这给出了:

    UK
    City 1 2 3
    France
    City 1 2
    US
    City 1 2 3
    

    【讨论】:

      猜你喜欢
      • 2016-11-09
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2018-03-18
      相关资源
      最近更新 更多