Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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_Algorithm_Dictionary_Data Structures - Fatal编程技术网

如何基于python中的另一个字典迭代字典?

如何基于python中的另一个字典迭代字典?,python,algorithm,dictionary,data-structures,Python,Algorithm,Dictionary,Data Structures,我有一本字典,里面有一周的饮食信息,我们需要根据输出的元数据计算一个顾客食用不同种类食物的天数。输出元数据将食物类别作为关键,饮食中的食物类别作为值。值1、0分别是表示客户是否进食的布尔指示符 在这里,客户在周四同时食用了鸡肉和羊肉,但在合计时,我们只想计算一天的“肉”。元数据中的类别分组将来可能会更改,例如,如果客户吃鱼 你能帮我解决这个问题吗 diet = {'chicken' : [1, 0, 0, 1, 0, 1, 0], 'lamb' : [0, 0, 1, 1,

我有一本字典,里面有一周的饮食信息,我们需要根据输出的元数据计算一个顾客食用不同种类食物的天数。输出元数据将食物类别作为关键,饮食中的食物类别作为值。值
1、0
分别是表示客户是否进食的布尔指示符

在这里,客户在周四同时食用了鸡肉和羊肉,但在合计时,我们只想计算一天的“肉”。元数据中的类别分组将来可能会更改,例如,如果客户吃鱼

你能帮我解决这个问题吗

diet = {'chicken' : [1, 0, 0, 1, 0, 1, 0],
        'lamb'    : [0, 0, 1, 1, 0, 1, 1],
        'salad'   : [0, 0, 1, 0, 1, 1, 1]}

output_metadata = {'Meat'    : ['chicken', 'lamb'],
                   'Veggies' : ['salad'],
                   'Overall' : ['chicken', 'lamb', 'salad']}
期望输出为

{'Meat': 5, 'Veggies': 4, 'Overall': 6}

如果您希望在不同的日期检查任何选定类别的非零值,则可以将选定的数组压缩在一起。例如:

def days(diet, categories):
    it = zip(*(diet[c] for c in categories))
    return sum(any(x) for x in it)
现在,您可以构建输出dict:

output = {k: days(Diet, v) for k, v in output_metadata.items()}
作为一行(实际上不要这样做):


但实际上,您拥有的是一个伪装的数据帧。考虑使用熊猫图书馆这样的东西。您可以单独选择天数和/或类别,并汇总您想要的任何统计数据。

StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并以:)为例,您似乎只需要一些嵌套循环。数字1和0代表什么?如果只是他们那天是否吃了食物,最好使用
True
False
。使用数字使它看起来像是数量。@Barmar,我已经更新了这个问题。更新真/假看起来很长,所以我没有。谢谢<代码>{k:sum(map(any,zip(*(Diet[f]表示f在v中)))表示输出中的k,v_metadata.items()}谢谢!但是这个解决方案给出了他吃这类食物的次数,但我们需要一种独特的方式来计算天数。。假设他在同一天吃了羔羊肉和鸡肉,它就应该被算作一只。@vamos3556。我完全重写了答案
output = {k: sum(any(x) for x in zip(*(Diet[c] for c in v))) for k, v in output_metadata.items()}