Python 如何打印具有可变数量键的格式化字符串+;字典中的值
是否可以使用str.format()从字典中打印可变数量的键+值?如果能在python2中工作那就太好了 假设我有一个字典,里面有一些键+值,我必须打印存储在列表/元组中的那些键的键+值Python 如何打印具有可变数量键的格式化字符串+;字典中的值,python,string,formatting,Python,String,Formatting,是否可以使用str.format()从字典中打印可变数量的键+值?如果能在python2中工作那就太好了 假设我有一个字典,里面有一些键+值,我必须打印存储在列表/元组中的那些键的键+值 dict1 = { 'k1':'v1', 'k2':'v2', 'k3':'v3'} to_print = ('k1', 'k2') string = '' for i in dict1: if i in to_print: string += "{" + i + "} " + ',
dict1 = { 'k1':'v1', 'k2':'v2', 'k3':'v3'}
to_print = ('k1', 'k2')
string = ''
for i in dict1:
if i in to_print:
string += "{" + i + "} " + ', '
string = string.format(**dict1)
print(string[:-2])
上述代码给出了
v1 , v2
我希望它的格式如下:
[k1] v1 , [k2] v2
[k1]: v1 , [k2]: v2
[k1]: v4 , [k2]: v5
UPD:
如果字典位于列表中,并且我需要在一行中打印一个字典中的键/值,则该解决方案面临挑战,例如:
list1 = [ { 'k1':'v1', 'k2':'v2', 'k3':'v3'} , { 'k1':'v4', 'k2':'v5', 'k3':'v6'} ]
to_print = ('k1', 'k2')
for i in list1:
for k,v in i.items():
if k in to_print:
elements = []
elements.append(f"[{k}]: {v}")
print(", ".join(elements))
[k1]: v1
[k2]: v2
[k1]: v4
[k2]: v5
虽然我需要这样的东西:
[k1] v1 , [k2] v2
[k1]: v1 , [k2]: v2
[k1]: v4 , [k2]: v5
之前,我通过SO中的分组函数解决了这一问题:
def grouped(iterable, n):
"s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ..."
return zip(*[iter(iterable)] * n)
有什么好办法吗
好吧,我想:
elements = []
for i in list1:
elements = []
for k,v in i.items():
if k in to_print:
elements.append(f"[{k}]: {v}")
print(", ".join(elements))```
或者可以通过使用列表理解缩短时间:
print(", ".join([f"[{key}]: {val}" for key, val in dict1.items() if key in to_print]))
将产生:
[k1]: v1, [k2]: v2, [k3]: v3
OP将
声明为打印=('k1','k2')
。你应该解决that@Sheldore啊,是的!幸运的是,这是一个简单的if
fix。您不需要if语句。只需在元组上循环并从dictionary@Sheldore如果dict1
数据是精确的,那么这可能会起作用,但是如果例如k2
未命中dict,则会引发keyrerror
。我通常更倾向于假设输入数据是可变的,并且可能有重复项,并且保留验证参考数据只是为了。。。验证参考,而不是访问的轴心。