在python列表中映射公共数据

时间:2019-02-27 12:54:05

标签: python python-3.x list csv dictionary

我正在使用# Example with 2 waves in 2 df model_ADI_aff <- "aff =~ bds89 + bds39 + bds50 + bds29 + bds84 + bds49 + bds70 + bds88 + bds11 + bds28 " fit_ADI_aff_1 <- cfa(model_ADI_aff, data = bds_1, missing = "fiml", estimator = "MLR", se = "robust.huber.white", test = "yuan.bentler") summary(fit_ADI_aff_1, standardized = TRUE, fit.measures = TRUE) modindices(fit_ADI_aff_1, sort.=TRUE, minimum.value=3) fit_ADI_aff_2 <- cfa(model_ADI_aff, data = bds_2, missing = "fiml", estimator = "MLR", se = "robust.huber.white", test = "yuan.bentler") summary(fit_ADI_aff_2, standardized = TRUE, fit.measures = TRUE) modindices(fit_ADI_aff_2, sort.=TRUE, minimum.value=3) 读取csv文件,该文件的数据如下所示,

DictReader()

我正在阅读并从两个列表中取出,

NAMES,DATA
Name1,abcd
Name1,efgh
Name1,fgdh
Name2,xjbjk
Name2,flfnd

但是我希望Name1与其对应的数据进行映射,如下所示(或采用其他某种格式,以便我可以对其进行迭代以获取某些特定值)

L1 = ['Name1','Name1','Name1','Name2','Name2']

L2 = ['abcd','efgh','fgdh','xjbjk','flfnd']

有人可以建议采取任何方式进行此操作吗?

预先感谢!

2 个答案:

答案 0 :(得分:2)

DictReader为您提供了一个入门指南。逐行建立结果,而不是将输入分为两个列表。

import collections
from operator import itemgetter

result = collections.defaultdict(list)
get_pair = itemgetter("NAME", "DATA")

with open("tmp.csv") as f:
    d = csv.DictReader(f)
    for row in d:
        name, value = get_pair(result)
        result[name].append(value)

defaultdict确保您第一次尝试使用result[name]作为键时,name是一个列表。 get_pair是等效于

的函数
def get_pair(d):
    return d["NAME"], d["DATA"]

答案 1 :(得分:1)

假设您已经有两个列表...

L1 = ['Name1','Name1','Name1','Name2','Name2']
L2 = ['abcd','efgh','fgdh','xjbjk','flfnd']

这有效:

d = {}
for k, v in zip(L1, L2):
    d.setdefault(k, []).append(v)

像这样:

>>> d
{'Name1': ['abcd', 'efgh', 'fgdh'], 'Name2': ['xjbjk', 'flfnd']}