如何将下面的嵌套字典值转换为单个字符串?
data = {'people': {'first': {'fname': 'P1', 'lname': 'L1'}, 'second': { 'fname': 'P2', 'lname': 'L2'}}}
输出应为P1 L1, P2 L2
这是我当前的代码:
print ', '.join("%s %s" % (data['people'][person].get('fname'), data['people'][person].get('lname')) for person in data['people'])
对于人员字典中的项目来说,这是一种有效的方法吗?如果不是如何改进?
最佳答案
您可以通过仅循环值并使用 format string 中的命名字段来使表达式有点短。 (强调是为了使其更具可读性):
>>> print ', '.join("{fname} {lname}".format(**p) for p in data['people'].values())
P2 L2, P1 L1
在 Python 3.2+ 中,这也可以使用 str.format_map
来完成:
>>> print (', '.join("{fname} {lname}".format_map(p) for p in data['people'].values()))
P1 L1, P2 L2
如果字典中可能缺少键fname
或lname
,那么您可以执行以下操作:
def get_values(dct, keys):
return (dct.get(k) for k in keys)
...
>>> keys = ('fname', 'lname')
>>> print ', '.join("{} {}".format(*get_values(p, keys)) for p in data['people'].values())
P2 L2, P1 L1
- 如果值的数量很大,则将
values()
替换为itervalues()
。在 Python 3 中仅使用values()
。 - 字典没有任何指定的顺序,因此您不能期望此处的输出为
P1 L1, P2
L2。
关于python - 将嵌套字典值转换为单个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40976532/