Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打印具有可变数量键的格式化字符串+;字典中的值_Python_String_Formatting - Fatal编程技术网

Python 如何打印具有可变数量键的格式化字符串+;字典中的值

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 + "} " + ',

是否可以使用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 + "} " +  ', '

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
。我通常更倾向于假设输入数据是可变的,并且可能有重复项,并且保留验证参考数据只是为了。。。验证参考,而不是访问的轴心。