Python 返回字典列表中第n个不同列表的n倍

Python 返回字典列表中第n个不同列表的n倍,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,我有一本类似这样的字典: [{ 'key' : 10, 'values' : [ [1,2] [3,4,5] [6,7,8,9] ] }, { ... }] 只要最长的列表中有值,我就尝试返回以“交叉点”为键、以每个列表的第n个元素为值的新词典。列表的长度不同,较短的列表只需将其最后的值追加多次,例如: {10:[1,3,6]} {10:[2,4,7]} {10:[2,5,8]} {10:[2,5,9]} 我应该迭代为itervalues()、iterkey()还是iteritems(

我有一本类似这样的字典:

[{ 'key' : 10, 'values' : [ [1,2] [3,4,5] [6,7,8,9] ] }, { ... }]
只要最长的列表中有值,我就尝试返回以“交叉点”为键、以每个列表的第n个元素为值的新词典。列表的长度不同,较短的列表只需将其最后的值追加多次,例如:

{10:[1,3,6]}

{10:[2,4,7]}

{10:[2,5,8]}

{10:[2,5,9]}
我应该迭代为itervalues()、iterkey()还是iteritems()? 可能会有一个类似的问题张贴,但我找不到一种方法来解释简洁,我缺乏关键字


如何创建一个函数来完成该任务?

这里有一个单行程序应该可以工作,但是请注意,您的输出不能是字典,因为同一个键不能在字典中多次显示

def intersection(key, values):
    return [(key, [L[i] if len(L) > i else L[-1] for L in values]) for i in range(max(map(len, values)))]

print(intersection(10, ([1,2], [3,4,5], [6,7,8,9])))

# >>> [(10, [1, 3, 6]), (10, [2, 4, 7]), (10, [2, 5, 8]), (10, [2, 5, 9])]

您需要迭代最长的数字列表中的项目的次数。在每次迭代中,使用增量索引从每个列表中获取第n个值

试着这样做:

def intersect(key,values):
  """
  Return n times the nth number of every list in `values`,
  in a list of dictionaries.
  """
  intersect_list = []
  longest = max(map(len,values))
  for n in range(longest):
      # get the nth value if there is one, or just the last value
      nth_values = [l[n] if n<len(l) else l[-1] for l in values]
      intersect_list.append({key:nth_values})
  return intersect_list

dict_list = [{ 'key':10, 'values':[[1,2],[3,4,5],[6,7,8,9]] }]
for d in dict_list:
  print(intersect(d['key'],d['values']))

您是否填写了预期的输出?交叉点又是什么?@Cunningham该输出将是一系列字典,其值“key”为key“交集”只是我在自己的代码中使用的实际字符串,而不是“键”。(整数实际上是从不同长度的多行中导出的Qgis点。但我觉得它们避开了问题的清晰性。)谢谢,这非常有效。此处的“map”与相同吗?内置函数
map()
获取
值中的每个项,并对其应用
len()
函数。因此,您得到一个长度列表,然后使用
max()
取最大值,因此
map()
与Qmap不同。我应该在Qmap类中说Qmap()。谢谢你的精确性,非常有用!下面是一个示例:map(lambda x:2*x,范围(5))==[2*x代表范围(5)]>>>[0,2,4,6,8]
[{10: [1, 3, 6]}, {10: [2, 4, 7]}, {10: [2, 5, 8]}, {10: [2, 5, 9]}]