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_Dictionary - Fatal编程技术网

Python 如何遍历字典中的一组列表?

Python 如何遍历字典中的一组列表?,python,list,dictionary,Python,List,Dictionary,我有一个巨大的字典,其中我有一个键代表一个人,每个人的值列表,下面是字典中两个人的例子: {'NuNu': ['0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '0', '1', '0', '5', '0', '0', '0',

我有一个巨大的字典,其中我有一个键代表一个人,每个人的值列表,下面是字典中两个人的例子:

{'NuNu': ['0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '0', '1', '0', '5', '0', '0', '0', '0', '0', '1', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 'Hamza ALi': ['0', '0', '0', '0', '0', '0', '0', '-5', '0', '5', '1', '0', '0', '0', '1', '0', '5', '0', '-3', '0', '3', '0', '0', '0', '0', '0', '0', '-5', '0', '0', '-3', '5', '0', '5', '0', '3', '0', '0', '1', '0', '3', '1', '3', '5', '0', '0', '0', '0', '0', '1', '-5', '0', '0', '0', '0']}
现在,我需要做的是将每个值相乘,比如0*0,0*0,等等,然后将所有值相加

我已经在另一段代码中完成了这项工作,只针对两个列表,我将值放入其中

我不知道如果有一本字典里面有列表,那就是值,我会怎么做

list1 = ['0', '0', '0', '5', '0', '0', '0', '5', '0', '5', '5', '0', '0', '0', '0', '0', '5', '-3', '-3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '5', '0', '0', '5', '0', '5', '5', '5', '5', '0', '0', '0', '0', '0', '3', '1', '0', '0', '0', '0']
list2 = ['5', '5', '0', '0', '0', '0', '0', '0', '0', '3', '0', '5', '0', '0', '1', '0', '5', '0', '1', '5', '0', '0', '0', '0', '0', '1', '0', '5', '0', '0', '3', '5', '5', '0', '0', '5', '0', '0', '3', '0', '0', '3', '5', '5', '0', '0', '0', '0', '0', '5', '5', '0', '5', '0', '0']

int_list_1 = map(int,list1)
int_list_2 = map(int,list2)

third = map(sum, zip(int_list_1, int_list_2))

product = []

for num1, num2 in zip(int_list_1,int_list_2):
    product.append(num1 * num2)
x = sum(product)

print(x)
^这为我提供了所需的正确值,但我需要帮助为字典中的多个列表设置这段代码

我知道我需要为循环设置一个
,也许是这样的

sum = 0
for value in dict:
    sum + y
print(sum)
你试试这个

a={'NuNu': ['0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '0', '1', '0', '5', '0', '0', '0', '0', '0', '1', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 'Hamza ALi': ['0', '0', '0', '0', '0', '0', '0', '-5', '0', '5', '1', '0', '0', '0', '1', '0', '5', '0', '-3', '0', '3', '0', '0', '0', '0', '0', '0', '-5', '0', '0', '-3', '5', '0', '5', '0', '3', '0', '0', '1', '0', '3', '1', '3', '5', '0', '0', '0', '0', '0', '1', '-5', '0', '0', '0', '0']}
x,y=a.values()
x=map(int,x)
y=map(int,y)
out=[i*j for i,j in zip(x,y)]
print(out)
print(sum(out))


你的想法是对的。对于任何键数的dicts来说,像这样的东西怎么样

def mul(iterable):
  t = 1
  for i in iterable:
     t *= int(i)
  return t

z = zip(*a.values()) # => [('0', '0'), ('0', '0'), ...]
m = map(mul, z)      # => [0, 0, ...]
print(sum(m))        # => 37
编辑 您可以用
functools.reduce

from functools import reduce

z = zip(*a.values())
m = map(lambda t: reduce(lambda x, y: int(x) * int(y), t), z)
print(sum(m))
现在,所有内容都作为一行:

print(sum(map(lambda t: reduce(lambda x, y: int(x) * int(y), t), zip(*a.values()))))
另一种方法是使用该功能:

from functools import reduce

inDict = {'NuNu': ['0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '0', '1', '0', '5', '0', '0', '0', '0', '0', '1', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 'Hamza ALi': ['0', '0', '0', '0', '0', '0', '0', '-5', '0', '5', '1', '0', '0', '0', '1', '0', '5', '0', '-3', '0', '3', '0', '0', '0', '0', '0', '0', '-5', '0', '0', '-3', '5', '0', '5', '0', '3', '0', '0', '1', '0', '3', '1', '3', '5', '0', '0', '0', '0', '0', '1', '-5', '0', '0', '0', '0']}
result = sum([reduce(lambda x,y: x*y, map(int,elem)) for elem in zip(*inDict.values())])
print(result)
输出:

37

这是我在一般情况下的解决方案。假设我们在字典
d
中有
n
项。然后,我创建一个包含整数值的列表集合,如下所示:

vals = map(lambda x: [int(n) for n in x], d.values())
之后,我得到所有元素相乘的元组:

p = zip(*vals)
最后,这是一种计算所有产品的方法:

#from functools import reduce
products = [reduce(lambda x,y: x*y, n) for n in p]
output = sum(products)
替代方法 由于字典值的长度是平衡的,我们可以使用
numpy
操作:

import numpy as np
vals = np.array(list(d.values())).astype(int)
products = np.prod(vals, axis=0)
output = np.sum(products)

将为您提供所有列表。为什么需要
third
import numpy as np
vals = np.array(list(d.values())).astype(int)
products = np.prod(vals, axis=0)
output = np.sum(products)