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]}]