我的设置如下。我有一个嵌套字典
dic1 = { 0 : 'a', dic2: { 2 : 'b', 3: 'c' } }
和一个字符串
s = 'The first letter is %(0)s and the third is %(dic2[2])s'
当然,以下内容不起作用:
print (s % dic1)
那么这样做的正确方法是什么?
注意:我知道问题String formating with nested dictionary,但我相信我的问题无法通过循环遍历字典来解决。以上当然是我实际问题的一个非常简化的版本,我需要尊重dic1
的格式并只调用一次print语句。
修改:
正如评论中指出的那样,我对我的简化确实有点仓促......
dic2 = { 2: 'b', 3: 'c'}
dic1 = { 0: 'a', 'dic2': dic2}
答案 0 :(得分:3)
如果键是字符串,这可能有效:
>>> dic2 = { 'b': 2, 'c': 3}
>>> dic1 = { 'a': 1, 'dic2': dic2}
>>> s = 'The first number is {a} and the third is {dic2[c]}'
>>> s.format(**dic1)
'The first number is 1 and the third is 3'
如果没有,这是有效的(我实际上发现了这一点):
>>> dic2 = { 2: 'b', 3: 'c'}
>>> dic1 = { 0: 'a', 'dic2': dic2}
>>> s = 'The first number is {dic1[0]} and the third is {dic1[dic2][3]}'
>>> s.format(dic1=dic1)
'The first number is a and the third is c'
>>>
答案 1 :(得分:0)
由于您没有指定版本,我将假设最新版本的Python(3.6)。很简单:
dic1 = { 0 : 'a', 'dic2': { 2 : 'b', 3: 'c' } }
print(f"The first letter is {dic1[0]} and the third is {dic1['dic2'][2]}")
答案 2 :(得分:0)
扩展@juanpa.arrivillaga's
回答:
使用
In [884]: dic2 = { 2: 'b', 3: 'c'}
...: dic1 = { 0: 'a', 'dic2': dic2}
In [894]: '{d[0]}, {d[dic2][3]}'.format(d=dic1)
Out[894]: 'a, c'
In [895]: dic1[0]
Out[895]: 'a'
In [896]: dic1['dic2'][3]
Out[896]: 'c'
894中的format
方法获得对dic1
的引用,并将其命名为d
。然后使用该字典评估{}
中的表达式。
或者,可以在右侧完成字典访问,并将字符串传递给格式字符串:
In [897]: '{}, {}'.format(dic1[0], dic1['dic2'][3])
Out[897]: 'a, c'
这适用于旧样式格式,它采用值元组:
In [898]: '%s, %s'%(dic1[0], dic1['dic2'][3])
Out[898]: 'a, c'
==============
字典也可以通过位置引用:
'{0[0]}, {1[dic2][3]}'.format(dic1,dic1)