数据结构.元组表到字典的转换

2024-09-30 16:35:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,比如

data = [
    ('di', 'c1', 'avg11'),
    ('di', 'c2', 'stdev12'),
    ('eng', 'c1', 'stdev21'),
    ('eng', 'c2', 'stdev22')
]

如何将'di''eng'项放入如下所示的字典中:

data1 = {'c1':'avg11','c2':'stdev12'}

data2 = {'c1':'stdev21','c2':'stdev22'}

使用熊猫、小矮人或普通Python?你知道吗


Tags: 列表data字典eng元组c2c1di
3条回答

使用Pandas您可以

In [660]: data1, data2 = pd.DataFrame(data).set_index([0, 1]).unstack()[2].to_dict('r')

In [661]: data1
Out[661]: {'c1': 'avg11', 'c2': 'stdev12'}

In [662]: data2
Out[662]: {'c1': 'stdev21', 'c2': 'stdev22'}

In [663]: pd.DataFrame(data).set_index([0, 1]).unstack()[2].to_dict('r')
Out[663]: [{'c1': 'avg11', 'c2': 'stdev12'}, {'c1': 'stdev21', 'c2': 'stdev22'}]

在纯Python中,只需构建一个顶级字典,如果仍然缺少,则使用^{}实现嵌套字典:

result = {}
for outer, inner, value in data:
    result.setdefault(outer, {})[inner] = value

这是对数据进行分组的最简单和更可读的方法。你知道吗

演示:

>>> data = [
...     ('di', 'c1', 'avg11'),
...     ('di', 'c2', 'stdev12'),
...     ('eng', 'c1', 'stdev21'),
...     ('eng', 'c2', 'stdev22')
... ]
>>> result = {}
>>> for outer, inner, value in data:
...     result.setdefault(outer, {})[inner] = value
...
>>> result
{'di': {'c1': 'avg11', 'c2': 'stdev12'}, 'eng': {'c1': 'stdev21', 'c2': 'stdev22'}}

如果之后必须有data1data2变量,只需从'di''eng'键设置这些变量:

data1 = result['di']
data2 = result['eng']

但如果您有更多或更少或不同的外键,这是相当不灵活的。你知道吗

使用简单的python

 def process_data(data):
    res = {}

    for itm in data:
        if itm[0] not in res:
            res[itm[0]] = {}
        res[itm[0]][itm[1]] = itm[2] 
    return res

使用示例:

>>> d = [
...     ('di', 'c1', 'avg11'),
...     ('di', 'c2', 'stdev12'),
...     ('eng', 'c1', 'stdev21'),
...     ('eng', 'c2', 'stdev22')
... ]
>>> print(process_data(d))
{'eng': {'c2': 'stdev22', 'c1': 'stdev21'}, 'di': {'c2': 'stdev12', 'c1': 'avg11'}}

相关问题 更多 >