【问题标题】:Printing from nested dictionary从嵌套字典打印
【发布时间】:2017-11-13 05:31:46
【问题描述】:

如何从嵌套字典中打印 1 个特定 值或 all key1 的选择 key2 值?我的代码中的行不显示任何内容。

敌人示例,如何打印(单个值):

Canon-PS-G7-X-Mark-II` 

或(为所有key1选择key2值):

Canon-PS-G7-X-Mark-II
Nikon-D5
Sony-alpha9

字典(部分)和代码

config = {
    'g7': {},
    'd5': {},
    'a9': {},
}
config['g7']['cam_name'] = ('Canon-PS-G7-X-Mark-II')
config['d5']['cam_name'] = ('Nikon-D5')
config['a9']['cam_name'] = ('Sony-alpha9')

camtype = """
1 camera:
(config['g7']['cam_name'])

all cameras
(config[.]['cam_name'])

"""
print(camtype)

【问题讨论】:

  • 谢谢,我试过for key, value in d.items():,但没能在info = """blahblah""" print(info) 中打印出来。
  • 只是一个用于打印的快速通用示例。对不起,应该说camtype
  • 试试这个 camtypes = [i['cam_name'] for i in config.values()]

标签: python python-3.x dictionary


【解决方案1】:

试试下面的代码:

config = {
'g7': {},
'd5': {},
'a9': {},
}
config['g7']['cam_name'] = ('Canon-PS-G7-X-Mark-II')
config['d5']['cam_name'] = ('Nikon-D5')
config['a9']['cam_name'] = ('Sony-alpha9')
camtype = """
1 camera:
({0})

all cameras
({1})

"""
single_camera = config['g7']['cam_name']
all_camera = ', '.join([config[k]['cam_name'] for k in config])
print(camtype.format(single_camera, all_camera))

输出:

1 camera:
(Canon-PS-G7-X-Mark-II)

all cameras
(['Canon-PS-G7-X-Mark-II', 'Nikon-D5', 'Sony-alpha9'])

【讨论】:

  • 这与我的解决方案几乎相同,但是数组理解可以改进(imo):', '.join(d['cam_name'] for d in config.values()),或', '.join([config[k]['cam_name'] for k in config])
  • 谢谢!。这很好。如果您有任何其他示例,如何在多行不相关的文本中插入许多单个值(例如:“blah blah blah Nikon-D5 blah blah blah)。现在这是可行的,但对您的代码来说很麻烦。另一个问题是如何当所有值都显示在垂直列表中时的格式?
  • print(camtype.format(single_camera, all_camera)) IndexError: tuple index out of range
  • @HakariDo 在我的机器上没有给出任何错误。你有什么改变吗?
  • @HakariDo all_camera = ', \n '.join([config[k]['cam_name'] for k in config]) 这将垂直打印所有相机的列表
【解决方案2】:

我相信别人可以比我做得更好。

config = {
    'g7': {},
    'd5': {},
    'a9': {},
}
config['g7']['cam_name'] = ('Canon-PS-G7-X-Mark-II')
config['d5']['cam_name'] = ('Nikon-D5')
config['a9']['cam_name'] = ('Sony-alpha9')

camtype = """1 camera: %s""" %(config['g7']['cam_name']) #search up python print function
allcam = [ value['cam_name'] for key, value in config.items()] #creates list with all cameras
str_allcam = "all cameras " + ', '.join( str(p) for p in allcam) # prints all cameras with a comma seperator

print(camtype +"\n" + str_allcam) # outputs a two lines because of newline seperator

【讨论】:

  • 谢谢。到目前为止,这是最好的。有什么方法可以将所有相机作为垂直列表?或作为列列表插入到表中的选项?
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2019-08-19
相关资源
最近更新 更多