使用嵌套字典的字符串格式

时间:2017-01-26 18:18:49

标签: python dictionary formatting

我的设置如下。我有一个嵌套字典

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}

3 个答案:

答案 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)

str format examples