如果变量为None,则打印空字符串

时间:2019-07-26 21:45:37

标签: python

我正在尝试制作一个模板字符串,该字符串将打印给定字典的值。但是,字典中可能不存在密钥。如果它不存在,我希望它返回一个空字符串。

为了说明我的意思,假设我有一个字典:

test_dict = { 1: "a", 2: "b"}

还有一个模板字符串:

'{} {} {}'.format(test_dict.get(1), test_dict.get(2), test_dict.get(3))

我想要以下输出:

'a b '

但是我得到了:

'a b None'

4 个答案:

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