[英]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()
使用谓词验证传递的数据。 谓词是根据条件返回True
或False
的函数,例如5 < x < 16
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.