如何将多个值添加到字典键?

时间:2018-09-26 21:51:07

标签: python python-3.x dictionary

    def chunk(it, size):
        it = iter(it)
        return iter(lambda: tuple(islice(it, size)), ()) 

    Results = []
    values = list(df['values'])
    name = list(df['name'])

    mergedata = {name_: counts_ for name_, counts_ in zip(name, list(chunk(values, 20)))}
    print(mergedata)

    for name_, counts in mergedata.items():
        if all( 5 < values_ < 16 for values_ in counts ):
            Results.append(f'{name_} passed.\n')
        else:
            Results.append(f'{name_} failed.\n')

我有一个脚本,可从csv文件读取两列。 “名称”和“值”。 然后,基于该值,如果该个人的所有值均为[5,16],则给出通过或失败的结论。但是chunk命令只给我最后一个值。例如:“尼克:5”和“丹:4”。每个人都有20个值分配给他们。我的代码中缺少什么?

chunk(values,20)#分割并打印第一个个体的20个随机值(Nick)例如:Nick:9,3,5,2,6,7,..... chunk(values,1)#块并打印所有个人的最后一个值:例如:“尼克:5”和“丹:4”。

Name Values Nick 4 Nick 14 Nick 6 Nick 4 Nick 11 Nick 17 Nick 19 ... ... James 12 James 4 James 1 James 2 James 5 ... ...

目标:{Nick:4、14、6、4、11、17、19 ...} 詹姆斯:{詹姆斯:12、4、1、2、5,...}

输出:Nick失败(由于17和19) 詹姆斯通过了

1 个答案:

答案 0 :(得分:0)

如果要将列处理为具有累积值的名称的字典,请考虑使用defaultdict

给出

import itertools as it
import collections as ct


pred = lambda x : 5 < x < 16

# Sample data (bad + good)
values = list(range(-10, -5)) + list(range(6, 11))
names = ["Nick"] * 5 + ["James"] * 5

代码

def make_dict(names, values):
    """Return a defaultdict of names and listed values."""
    data = ct.defaultdict(list)
    for name, value in zip(names, values):
        data[name].append(value)
    return data


def process_dict(data, pred):
    """Return a list of strings; pass if values satisfy the predicate."""
    result = []
    for name, counts in data.items():
        if all(pred(v) for v in counts):
            result.append(f"{name} passed.\n")
        else:
            result.append(f"{name} failed.\n")
    return result

演示

d = make_dict(names, values)
d
# defaultdict(list, {'Nick': [-10, -9, -8, -7, -6], 'James': [6, 7, 8, 9, 10]})

process_dict(d, pred)
# ['Nick failed.\n', 'James passed.\n']

详细信息

  • 我们使用名称和值的示例数据
  • make_dict()返回一个名称-值对字典。如果缺少键,defaultdict将创建一个空列表,因此我们可以安全地附加没有KeyError的值;这样可以避免分块。
  • process_dict()使用谓词验证传递的数据。谓词是根据条件,例如,返回TrueFalse的函数。 5 < x < 16