Python:将一个列表除以另一个列表的长度,并用该除法创建一个字典
我有两个动态变化的列表,最后我需要一个字典,当列表的长度变化时,它会平均地划分列表,并将结果放入字典中 Examples: a = ['a','b','c'] b = ['x','y','z','l','m','n','p','q'] Result: c = { a:['x','y','z'], b:['l','m','n'], c:['p','q'] } a = ['a','b'] b = ['x','y','z','l','m','n','p','q'] Result: c = { a:['x','y','z','l'], b:['m','n','p','q'] } a = ['a','b','c','d'] b = ['x','y','z','l','m','n','p','q'] Result: c = { a:['x','y'], b:['z','l'], c:['m','n'], d:['p','q'] } a = ['a','b','c'] b = ['x','y','z','l','m','n','p','q','r','t','s'] Result: c = { a:['x','y','z','l'], b:['m','n','p','q'], c:['r','t','s'] } 示例: a=['a','b','c'] b=['x','y','z','l','m','n','p','q'] 结果: c={a:['x','y','z',b:['l','m','n',c:['p','q']} a=['a','b'] b=['x','y','z','l','m','n','p','q'] 结果: c={a:['x','y','z','l'],b:['m','n','p','q']} a=['a','b','c','d'] b=['x','y','z','l','m','n','p','q'] 结果: c={a:['x','y'],b:['z','l'],c:['m','n'],d:['p','q']} a=['a','b','c'] b=['x','y','z','l','m','n','p','q','r','t','s'] 结果: c={a:['x','y','z','l'],b:['m','n','p','q'],c:['r','t','s']}Python:将一个列表除以另一个列表的长度,并用该除法创建一个字典,python,list,sorting,Python,List,Sorting,我有两个动态变化的列表,最后我需要一个字典,当列表的长度变化时,它会平均地划分列表,并将结果放入字典中 Examples: a = ['a','b','c'] b = ['x','y','z','l','m','n','p','q'] Result: c = { a:['x','y','z'], b:['l','m','n'], c:['p','q'] } a = ['a','b'] b = ['x','y','z','l','m','n','p','q'] Result: c = { a:[
可以使用以下表达式:
def group_list(a,b):
nl = (len(b)+len(a)-1)//len(a)
return {a[i]:b[nl*i:nl*i+nl] for i in range(len(a))}
如果b
中的项目数不能被b
整除,它只会减少最后一个键的数量
这将产生:
>>> a = ['a','b','c']
>>> b = ['x','y','z','l','m','n','p','q']
>>> group_list(a,b)
{'c': ['p', 'q'], 'a': ['x', 'y', 'z'], 'b': ['l', 'm', 'n']}
>>> a = ['a','b']
>>> b = ['x','y','z','l','m','n','p','q']
>>> group_list(a,b)
{'a': ['x', 'y', 'z', 'l'], 'b': ['m', 'n', 'p', 'q']}
>>> a = ['a','b','c','d']
>>> b = ['x','y','z','l','m','n','p','q']
>>> group_list(a,b)
{'d': ['p', 'q'], 'c': ['m', 'n'], 'b': ['z', 'l'], 'a': ['x', 'y']}
>>> a = ['a','b','c']
>>> b = ['x','y','z','l','m','n','p','q','r','t','s']
>>> group_list(a,b)
{'c': ['r', 't', 's'], 'b': ['m', 'n', 'p', 'q'], 'a': ['x', 'y', 'z', 'l']}
可以使用以下表达式:
def group_list(a,b):
nl = (len(b)+len(a)-1)//len(a)
return {a[i]:b[nl*i:nl*i+nl] for i in range(len(a))}
如果b
中的项目数不能被b
整除,它只会减少最后一个键的数量
这将产生:
>>> a = ['a','b','c']
>>> b = ['x','y','z','l','m','n','p','q']
>>> group_list(a,b)
{'c': ['p', 'q'], 'a': ['x', 'y', 'z'], 'b': ['l', 'm', 'n']}
>>> a = ['a','b']
>>> b = ['x','y','z','l','m','n','p','q']
>>> group_list(a,b)
{'a': ['x', 'y', 'z', 'l'], 'b': ['m', 'n', 'p', 'q']}
>>> a = ['a','b','c','d']
>>> b = ['x','y','z','l','m','n','p','q']
>>> group_list(a,b)
{'d': ['p', 'q'], 'c': ['m', 'n'], 'b': ['z', 'l'], 'a': ['x', 'y']}
>>> a = ['a','b','c']
>>> b = ['x','y','z','l','m','n','p','q','r','t','s']
>>> group_list(a,b)
{'c': ['r', 't', 's'], 'b': ['m', 'n', 'p', 'q'], 'a': ['x', 'y', 'z', 'l']}
Numpy很快就做到了这一点:
>>> a = ['a','b','c']
>>> b = ['x','y','z','l','m','n','p','q']
>>> dict(zip(a, map(list, np.array_split(b, len(a)))))
{'a': ['x', 'y', 'z'], 'b': ['l', 'm', 'n'], 'c': ['p', 'q']}
如果b
中的项目数不能被b
整除,则将尽可能均匀地分配项目:
>>> a = 'abc'
>>> b = range(10)
>>> dict(zip(a, map(list, np.array_split(b, len(a)))))
{'a': [0, 1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}
Numpy很快就做到了这一点:
>>> a = ['a','b','c']
>>> b = ['x','y','z','l','m','n','p','q']
>>> dict(zip(a, map(list, np.array_split(b, len(a)))))
{'a': ['x', 'y', 'z'], 'b': ['l', 'm', 'n'], 'c': ['p', 'q']}
如果b
中的项目数不能被b
整除,则将尽可能均匀地分配项目:
>>> a = 'abc'
>>> b = range(10)
>>> dict(zip(a, map(list, np.array_split(b, len(a)))))
{'a': [0, 1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}
您还可以创建块并将其与
a
中的元素映射:
a = ['a','b','c']
b = ['x','y','z','l','m','n','p','q','r','t','s']
import math
# find the size
size = math.ceil(len(b)/len(a))
# creating list of chunks of size
chunks = [b[i:i + size] for i in range(0, len(b), size)]
# matching chunks with elements in 'a'
c = {a[i]:chunks[i] for i in range(len(a))}
或者,也可以使用词典理解
完成上述步骤:
c = {a[index]:item for index, item in enumerate(b[i:i + size]
for i in range(0, len(b), size))}
print(c)
输出:
{'a': ['x', 'y', 'z', 'l'], 'b': ['m', 'n', 'p', 'q'], 'c': ['r', 't', 's']}
您还可以创建块并将其与
a
中的元素映射:
a = ['a','b','c']
b = ['x','y','z','l','m','n','p','q','r','t','s']
import math
# find the size
size = math.ceil(len(b)/len(a))
# creating list of chunks of size
chunks = [b[i:i + size] for i in range(0, len(b), size)]
# matching chunks with elements in 'a'
c = {a[i]:chunks[i] for i in range(len(a))}
或者,也可以使用词典理解
完成上述步骤:
c = {a[index]:item for index, item in enumerate(b[i:i + size]
for i in range(0, len(b), size))}
print(c)
输出:
{'a': ['x', 'y', 'z', 'l'], 'b': ['m', 'n', 'p', 'q'], 'c': ['r', 't', 's']}
如果
b
是长度未知的生成器,则可以使用一系列的deque来构建字符串:
a = ['a','b','c']
b = ['x','y','z','l','m','n','p','q']
from collections import deque
results = [deque() for item in a]
for item in b:
results[0].append(item)
for d,d1 in zip(results, results[1:]):
if len(d1) < len(d):
d1.append(d.popleft())
dd = dict(zip(a, map(list, reversed(results))))
print(b)
for k in sorted(dd):
print(k, dd[k])
不确定这是否总能给出所需的分组,但其优点是使用
b
的生成器(切勿在a
或b
上调用len
)。如果b
是长度未知的生成器,则可以使用一系列deque来构建字符串:
a = ['a','b','c']
b = ['x','y','z','l','m','n','p','q']
from collections import deque
results = [deque() for item in a]
for item in b:
results[0].append(item)
for d,d1 in zip(results, results[1:]):
if len(d1) < len(d):
d1.append(d.popleft())
dd = dict(zip(a, map(list, reversed(results))))
print(b)
for k in sorted(dd):
print(k, dd[k])
不确定这是否总能给出所需的分组,但其优点是使用
b
的生成器(切勿在a
或b
上调用len
)。请显示您的问题。您应该至少包括您遇到问题的代码的大纲(但最好是a),然后我们可以尝试帮助解决特定问题。您也应该阅读。对不起,我尝试了许多不同的代码片段,但无法产生我想要的结果。请显示您的问题。您应该至少包括您遇到问题的代码的大纲(但最好是a),然后我们可以尝试帮助解决特定问题。你也应该阅读。对不起,我尝试了很多不同的代码片段,但无法产生我想要的结果。