繁体   English   中英

如何向dict键添加多个值?

[英]How to add multiple values to dict key?

    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],则它给出通过或失败。 但是块命令只给我最后一个值。 例如:“尼克:5”和“丹:4”。 每个人都有 20 个分配给他们的值。 我的代码中缺少什么?

chunk(values, 20) # 分块并打印第一个个体 (Nick) 的 20 个随机值 Ex: 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 ... ...

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

输出:尼克失败(因为 17 和 19)詹姆斯通过

如果您将列处理为具有累积值的名称字典,请考虑使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM