【问题标题】:How to use string.format with nested dict如何使用带有嵌套字典的 string.format
【发布时间】:2015-12-24 10:42:30
【问题描述】:

我有一个嵌套的字典:

KEYS1 = ("A", "B", "C")
KEYS2 = ("X", "Y", "Z")

d = dict.fromkeys(KEYS1, dict.fromkeys(KEYS2, 0))

我现在想使用格式将其值嵌入到字符串中,例如

print("d['A']['X']={A,X:d}".format(**d))

输出:

d['A']['X']=0

那行不通。有关如何正确执行此操作的任何建议?

【问题讨论】:

  • 你能解释一下预期的输出吗?
  • d = dict.fromkeys(KEYS1, dict.fromkeys(KEYS2, 0)) - 小心。外部字典中的每个值都是 same 内部字典,因此您对d['A'] 所做的任何事情都将通过d['B'] 可见。
  • 哦,你是对的 user2357112 - 感谢您了解这一点。对于使用归零键的 2 暗存储实例化,您有什么建议?
  • @Oxonon:字典理解,或 dict 在 Python {key1: dict.fromkeys(KEYS2, 0) for key1 in KEYS1},或dict((key1, dict.fromkeys(KEYS2, 0)) for key1 in KEYS1)。在内部值也需要不同的情况下,您也可以将内部 fromkeys 替换为字典理解。

标签: python


【解决方案1】:
KEYS1 = ("A", "B", "C")
KEYS2 = ("X", "Y", "Z")

d = dict.fromkeys(KEYS1, dict.fromkeys(KEYS2, 0))

print("d['A']['X']={A[X]}".format(**d))

输出:

d['A']['X']=0

从 python 3.6 开始,您将能够使用Literal string interpolation 访问字符串中的字典:

In [23]: print(f"d['A']['X']={d['A']['X']}")
d['A']['X']=0

【讨论】:

    【解决方案2】:

    您可以利用str.format 对您提供的参数进行下标的能力。

    KEYS1 = ("A", "B", "C")
    KEYS2 = ("X", "Y", "Z")
    
    d = dict.fromkeys(KEYS1, dict.fromkeys(KEYS2, 0))
    
    print("d['A']['X']={[A][X]}".format(d))
    

    这与Padraic Cunningham's answer 非常相似,这也是一种很好且正确的方法(这就是我+1 的原因)。不同之处在于,在他的回答中,字符串{A[X]} 的一部分意味着.format 方法正在寻找一个关键字参数,该参数是通过解压dict d 来提供的。

    在我的方法中,它需要一个位置参数,它必须是带有键 'A' 的字典,它也必须是带有键 'X' 的字典

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2022-11-01
      • 2021-08-10
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多