Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 当dict中的值是一个列表时,如何对dict进行这样的拆分?_Python_Python 3.x - Fatal编程技术网

Python 当dict中的值是一个列表时,如何对dict进行这样的拆分?

Python 当dict中的值是一个列表时,如何对dict进行这样的拆分?,python,python-3.x,Python,Python 3.x,我有一个dict,其中key是string,value是一个包含一些数字的列表,比如代码中的d。 我想返回一个列表,其中每个元素都是一个dict,包含输入dict中的所有键,并按递增顺序包含值,例如result in code。 假设我们不知道列表中有多少元素(代码中可能不是3或4),但元素的数量是相同的 e、 g.1: d={'1':[11,12,13],'2':[21,22,23],'3':[31,32,33]} # ??? 结果=[{'1':11,'2':21,'3':31}, {'1':

我有一个dict,其中key是string,value是一个包含一些数字的列表,比如代码中的d。 我想返回一个列表,其中每个元素都是一个dict,包含输入dict中的所有键,并按递增顺序包含值,例如result in code。 假设我们不知道列表中有多少元素(代码中可能不是3或4),但元素的数量是相同的

e、 g.1:

d={'1':[11,12,13],'2':[21,22,23],'3':[31,32,33]}
# ???
结果=[{'1':11,'2':21,'3':31},
{'1': 12, '2': 22, '3': 23},
{'1': 13, '2': 23, '3': 33}]
e、 g.2:

d={'1':[11,12,13,14],'2':[21,22,23,24],'3':[31,32,33,34]}
# ???
结果=[{'1':11,'2':21,'3':31},
{'1': 12, '2': 22, '3': 23},
{'1': 13, '2': 23, '3': 33},
{'1': 14, '2': 24, '3': 34}, ]

zip
所有值都列在一起,然后用键将每个结果值的
元组压缩成新的
dict
s:

result = [dict(zip(d, vs)) for vs in zip(*d.values())]

这是因为
dict
的迭代顺序与其值的迭代顺序一致(它在3.6+中的插入顺序是一致的,但对于所有版本的给定Python运行,它是一致的);“每个循环”
zip
d
中的键将按照前面
zip
中拉取值的相同顺序进行迭代


这假设“增加顺序”的意思是“保留输入的顺序”;如果不是这样,则需要明智地使用内置的
排序

zip
将所有值列表放在一起,然后用键将每个结果值的
元组压缩成新的
dict
s:

result = [dict(zip(d, vs)) for vs in zip(*d.values())]

这是因为
dict
的迭代顺序与其值的迭代顺序一致(它在3.6+中的插入顺序是一致的,但对于所有版本的给定Python运行,它是一致的);“每个循环”
zip
d
中的键将按照前面
zip
中拉取值的相同顺序进行迭代


这假设“增加顺序”的意思是“保留输入的顺序”;如果不是这样,则需要明智地使用内置的
排序的

假设您的值列表已排序,以下代码可以很好地获得所需的输出

def answer(testdict):
    result = []
    lengths = [len(v) for v in testdict.values()]
    length = lengths[0]
    for i in range(length):
        newdict = {}
        for j in testdict:
            newdict[j] = testdict[j][i]
        result.append(newdict)
    print(result)

但是,如果值列表未排序,请先尝试使用
排序的

假设值列表已排序,以下代码可以很好地获得所需的输出

def answer(testdict):
    result = []
    lengths = [len(v) for v in testdict.values()]
    length = lengths[0]
    for i in range(length):
        newdict = {}
        for j in testdict:
            newdict[j] = testdict[j][i]
        result.append(newdict)
    print(result)

但是,如果值列表未排序,请先尝试使用
sorted

您尝试过什么?原始目录中的列表是否保证按递增顺序排列?(因为你没有说它们是,但你的两个例子都尊重这个前提条件。)编辑:“增加”意味着保持列表中的原始顺序,而不是数字增加。你尝试过什么?原始目录中的列表是否保证按递增顺序排列?(因为你没有说它们是,但你的两个例子都尊重这个前提条件。)编辑:“增加”的意思是保持列表中的原始顺序,而不是数字增加。非常感谢!这正是我需要的!谢谢!这正是我需要的!我更喜欢使用无循环实现,但仍然非常感谢。我更喜欢使用无循环实现,但仍然非常感谢。