Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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:将一个列表除以另一个列表的长度,并用该除法创建一个字典_Python_List_Sorting - Fatal编程技术网

Python:将一个列表除以另一个列表的长度,并用该除法创建一个字典

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:[

我有两个动态变化的列表,最后我需要一个字典,当列表的长度变化时,它会平均地划分列表,并将结果放入字典中

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']}
可以使用以下表达式:

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),然后我们可以尝试帮助解决特定问题。你也应该阅读。对不起,我尝试了很多不同的代码片段,但无法产生我想要的结果。