Python:具有多个值的键的字典。如何将字典打印为分隔值列表的一组字典

Python:具有多个值的键的字典。如何将字典打印为分隔值列表的一组字典,python,dictionary,Python,Dictionary,我有一个字典,其中的键有多个值,如下所示: my_dict = {'key0': (0, 1), 'key1': (a, b), 'key2': (x, y)} >>> my_dict = {'key0': (0, 1), 'key1': (2, 3), 'key2': (4, 5)} >>> dict_list = [] >>> for key in my_dict: ... for index, item in enumerate

我有一个字典,其中的键有多个值,如下所示:

my_dict = {'key0': (0, 1), 'key1': (a, b), 'key2': (x, y)}
>>> my_dict = {'key0': (0, 1), 'key1': (2, 3), 'key2': (4, 5)}
>>> dict_list = []
>>> for key in my_dict:
...    for index, item in enumerate(my_dict[key]):
...       if len(dict_list) >= index + 1:
...           dict_list[index][key] = item
...       else:
...           dict_list.append({key: item})
... 
>>> dict_list
[{'key2': 4, 'key1': 2, 'key0': 0}, {'key2': 5, 'key1': 3, 'key0': 1}]
我想把我的字典印成

my_dict = {'key0': 0, 'key1': a, 'key2': x}, {'key0': 1, 'key1': b, 'key2': y}

我怎样才能做到这一点?请帮忙

如果所有元组的长度相同(即2),则可以使用列表理解:

[{key: value[i] for key, value in my_dict} for i in range(2)]
以下是一个例子:

my_dict = {'key0': (0, 1), 'key1': (1, 2), 'key2': ('a', 'b')}
[{key: value[i] for key, value in my_dict.iteritems()} for i in range(2)]
输出:

[{'key0': 0, 'key1': 1, 'key2': 'a'}, {'key0': 1, 'key1': 2, 'key2': 'b'}]

如果所有元组的长度相同(即2),则可以使用列表:

[{key: value[i] for key, value in my_dict} for i in range(2)]
以下是一个例子:

my_dict = {'key0': (0, 1), 'key1': (1, 2), 'key2': ('a', 'b')}
[{key: value[i] for key, value in my_dict.iteritems()} for i in range(2)]
输出:

[{'key0': 0, 'key1': 1, 'key2': 'a'}, {'key0': 1, 'key1': 2, 'key2': 'b'}]

没有像a=
{},{}
那样的数据结构。但是,您可以将初始dict拆分为2个dict:

my_dict = {'key0': (0, 1), 'key1': ('a', 'b'), 'key2': ('x', 'y')}
my_dict_1 = dict((key, value[0]) for key, value in my_dict.iteritems())
my_dict_2 = dict((key, value[1]) for key, value in my_dict.iteritems())
结果:

print my_dict_1
{'key0': 0, 'key1': 'a', 'key2': 'x'}
print my_dict_1
{'key0': 1, 'key1': 'b', 'key2': 'y'}

没有像a=
{},{}
那样的数据结构。但是,您可以将初始dict拆分为2个dict:

my_dict = {'key0': (0, 1), 'key1': ('a', 'b'), 'key2': ('x', 'y')}
my_dict_1 = dict((key, value[0]) for key, value in my_dict.iteritems())
my_dict_2 = dict((key, value[1]) for key, value in my_dict.iteritems())
结果:

print my_dict_1
{'key0': 0, 'key1': 'a', 'key2': 'x'}
print my_dict_1
{'key0': 1, 'key1': 'b', 'key2': 'y'}

假设所有值都是元组/列表,但大小可能不同,则可以执行以下操作:

def expand_dict(input_dict):
    max_size = max(len(v) for v in input_dict.values())
    output_list = [dict() for _ in range(max_size)]
    for k, v in input_dict.items():
        for i, x in enumerate(v):
            output_list[i][k] = x
    return output_list

my_dict = {'key0': (0, 1), 'key1': ('a', 'b'), 'key2': ('x', 'y', 'z')}

print expand_dict(my_dict)
这张照片是:

[{'key2': 'x', 'key1': 'a', 'key0': 0}, {'key2': 'y', 'key1': 'b', 'key0': 1}, {'key2': 'z'}]

假设所有值都是元组/列表,但大小可能不同,则可以执行以下操作:

def expand_dict(input_dict):
    max_size = max(len(v) for v in input_dict.values())
    output_list = [dict() for _ in range(max_size)]
    for k, v in input_dict.items():
        for i, x in enumerate(v):
            output_list[i][k] = x
    return output_list

my_dict = {'key0': (0, 1), 'key1': ('a', 'b'), 'key2': ('x', 'y', 'z')}

print expand_dict(my_dict)
这张照片是:

[{'key2': 'x', 'key1': 'a', 'key0': 0}, {'key2': 'y', 'key1': 'b', 'key0': 1}, {'key2': 'z'}]

您可以这样尝试:

my_dict = {'key0': (0, 1), 'key1': (a, b), 'key2': (x, y)}
>>> my_dict = {'key0': (0, 1), 'key1': (2, 3), 'key2': (4, 5)}
>>> dict_list = []
>>> for key in my_dict:
...    for index, item in enumerate(my_dict[key]):
...       if len(dict_list) >= index + 1:
...           dict_list[index][key] = item
...       else:
...           dict_list.append({key: item})
... 
>>> dict_list
[{'key2': 4, 'key1': 2, 'key0': 0}, {'key2': 5, 'key1': 3, 'key0': 1}]

从处理时间的角度来看,这是非常有效的,并且还涵盖了所有可能的dict长度情况(如果其中一个元组有3个值而不是2会怎么样)。

您可以这样尝试:

my_dict = {'key0': (0, 1), 'key1': (a, b), 'key2': (x, y)}
>>> my_dict = {'key0': (0, 1), 'key1': (2, 3), 'key2': (4, 5)}
>>> dict_list = []
>>> for key in my_dict:
...    for index, item in enumerate(my_dict[key]):
...       if len(dict_list) >= index + 1:
...           dict_list[index][key] = item
...       else:
...           dict_list.append({key: item})
... 
>>> dict_list
[{'key2': 4, 'key1': 2, 'key0': 0}, {'key2': 5, 'key1': 3, 'key0': 1}]

从处理时间的角度来看,这是非常有效的,并且还涵盖了所有可能的dict长度情况(如果其中一个元组有3个值而不是2会怎么样)。

复杂示例的扩展解决方案:

使用的函数:
zip()
itertools.zip\u longest()

输出:

[{'key2': 'x', 'key0': 0, 'key1': 'a', 'key3': 'z'}, {'key2': 'y', 'key0': 1, 'key1': 'b', 'key3': 'v'}]

具有复杂示例的扩展解决方案:

使用的函数:
zip()
itertools.zip\u longest()

输出:

[{'key2': 'x', 'key0': 0, 'key1': 'a', 'key3': 'z'}, {'key2': 'y', 'key0': 1, 'key1': 'b', 'key3': 'v'}]

所有值都是2元组大小吗?所有值都是2元组大小吗?