【问题标题】:How to include a dict comprehension in an f-string?如何在 f 字符串中包含 dict 理解?
【发布时间】:2021-11-23 00:20:43
【问题描述】:

有没有办法在 fstring 中使用 dict 理解?案例如下:

a = ['a', 'b', 'c', 'd']
list_comprehension = [v for v in a]
my_f_string = f"dict comprehension {v:None for v in a}"

我不想使用格式插值 ("{}".format(dict_comprehension))。我想使用最 Pythonic 的方式将该列表理解包含在用于记录数据的 fstring 中。

【问题讨论】:

  • 如果你想做“最 Pythonic 的方式”,那么我建议不要在 f-string 中这样做。你得到了尽可能密集的所有内容,但是可读性受到影响,并且没有任何用于代码检查/格式化/等的工具(例如 black/mypy)能够对 f-string 中的任何内容执行任何操作。创建字典并通过str(the_dict) 格式化,如果你坚持使用f-strings,那么f"{str(the_dict)}"

标签: python string-interpolation f-string


【解决方案1】:

是的,当然有。您只需将推导式括在括号 ( ) 中,因为两个连续的 {s 被解释为文字 "{" 字符串。

a = ['a', 'b', 'c', 'd']
list_comprehension = [v for v in a]

这行得通:

my_f_string = f"dict comprehension {({v:None for v in a})}"
print(my_f_string)

输出:

dict comprehension {'a': None, 'b': None, 'c': None, 'd': None}

但是,这不起作用(Stack Overflow 的语法突出显示也有助于表明这一点):

my_f_string = f"dict comprehension {{v:None for v in a}}"
print(my_f_string)

输出:

dict comprehension {v:None for v in a}

【讨论】:

  • 太棒了!我确信解决方案很简单。感谢您的帮助,希望这对其他人也有用! ;)
【解决方案2】:

在这种情况下,我更喜欢dict.fromkeys

my_f_string = f"dict comprehension {dict.fromkeys(a)}"

更短更优雅:)

现在:

print(my_f_string)

输出:

dict comprehension {'a': None, 'b': None, 'c': None, 'd': None}

【讨论】:

  • @MrFuppes 抱歉,已编辑,在移动设备上自动更正。
  • 这只能在所有键都具有相同值的情况下使用,对吧?
  • 这适用于初始化,我正在做更复杂的字典,但正如@rou_hola 指出的那样,我的想法是在 fstring 中完成所有操作。非常感谢!
  • @JussiNurminen 是的,您也可以将值指定为第二个参数,即默认值。对于这种情况,这是最有效的。
【解决方案3】:

你想要做的可以简单地完成

dict_comp = {v:None for v in a}
my_f_string = f"dict comprehension {dict_comp}" 

或者,如果您真的想在 f 字符串中使用 dict 理解,那么您必须将 {v:None for v in a} 放在另一个花括号中,并在 {v:None for v in a} 之前和之后使用 一个空格

my_f_string = f"dict comprehension { {v:None for v in a} }"

【讨论】:

  • 这正是我不想做的。我想在同一个 f_string 中执行此操作。 @rou_hola 写了我要找的东西。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多