我正在尝试制作一个模板字符串,该字符串将打印给定字典的值。但是,字典中可能不存在密钥。如果它不存在,我希望它返回一个空字符串。
为了说明我的意思,假设我有一个字典:
test_dict = { 1: "a", 2: "b"}
还有一个模板字符串:
'{} {} {}'.format(test_dict.get(1), test_dict.get(2), test_dict.get(3))
我想要以下输出:
'a b '
但是我得到了:
'a b None'
答案 0 :(得分:6)
使用字典的get
函数。这使您可以指定一个值,如果找不到该键,则返回该值
'{}, {}, {}'.format(test_dict.get(1,''), test_dict.get(2,''), test_dict.get(3, ''))
答案 1 :(得分:1)
每条操作的更新
您可以使用import requests
data = {"partOptionFilter":{"PartNumber":"0119000230","AlternativeOemId":"17155"}}
r = requests.post('https://www.partsfinder.com/Catalog/Service/GetPartOptions',json=data).json()
print(r['Data']['PartOptions'][0]['YourPrice'])
库在此处提供帮助。使用您的string
参见以下脚本:
test_dict
我们构建了一个快速的#https://stackoverflow.com/a/51359690
from string import Formatter
class NoneAsEmptyFormatter(Formatter):
def get_value(self, key, args, kwargs):
v = super().get_value(key, args, kwargs)
return ' ' if v is None else v
fmt = NoneAsEmptyFormatter()
test_dict = { 1: "a", 2: "b"}
test_str = fmt.format('{} {} {}', test_dict.get(1), test_dict.get(2), test_dict.get(3))
print(test_str)
类,并使用该类来格式化来自字典的字符串。
答案 2 :(得分:1)
一种方法是获取字典的长度,然后在模板中放入相同数量的占位符:
In [27]: test_dict = { 1: "a", 2: "b"}
In [28]: ' '.join(['{}'] * len(test_dict))
Out[28]: '{} {}'
In [29]: ' '.join(['{}'] * len(test_dict)).format(*test_dict.values())
Out[29]: 'a b'
请注意,这基本上与' '.join(test_dict.values())
相同,但以模板字符串为例。
答案 3 :(得分:1)
Re your comment,
虽然您现在提到了多余的空间,但是如果不存在密钥,是否可以完全删除占位符?
是的,这是可能的。只需列出一个值列表,过滤掉所有None
,然后加入结果:
In [3]: values = map(test_dict.get, [1, 2, 3])
In [4]: ' '.join(v for v in values if v is not None)
Out[4]: 'a b'
或者顺序不重要,或者如果您使用的是Python 3.7+,并且想要保留插入顺序,则可以跳过一些步骤:
In [5]: ' '.join(test_dict.values())
Out[5]: 'a b'