为了账号安全,请及时绑定邮箱和手机立即绑定

从包含列表的列表中创建Python字典

从包含列表的列表中创建Python字典

qq_花开花谢_0 2024-01-24 15:40:55
我创建了一个列表,其中包含列表;[['2020/10/07', 'AA123', '19.24', '22.00'],  ['2020/11/17', 'BBB123', '23.59', '00.00'],  ['2020/14/67', 'AAA123', '08.00', '16.00']]问题 1:但是我不确定如何将此列表变成字典。我已经尝试了几次,但没有任何效果对我来说。我希望每个列表中的第二个值(索引 1)作为字典的键,其余的作为值。问题 2:如果每个列表中的第二个元素存在于多个列表中,我希望在同一个键下找到它们。
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

您可以首先使用列表理解从第一个列表中提取键和值:

keys = [row[1] for row in l]
values = [[row[0], row[2],row[3]] for row in l]

然后使用相同的技术创建字典:

{k:v for k,v in zip(keys,values)}

(该zip函数允许同时迭代 2 个列表键和值)

对于问题 2:不幸的是,您不能在字典中多次使用相同的键,您可能必须使用它len(keys) == len(set(keys))来测试您的键列表是否有重复项(该set函数从列表中提取所有唯一值)。


查看完整回答
反对 回复 2024-01-24
?
呼如林

TA贡献1798条经验 获得超3个赞

尝试这个:


my_dict = {}

for sub_list in vals:

    val_key = sub_list[1]

    if val_key in my_dict:

        my_dict[val_key].extend([sub_list[0]] + sub_list[2:])

    else:

        my_dict[val_key] = [sub_list[0]] + sub_list[2:]

  1. 创建一个空字典来放置您的值。

  2. 浏览数据中的所有条目。

  3. 输入该条目的键 ( sub_list[1]),我们将使用它来索引我们的字典。

  4. 如果该键已经存在,则使用该项目的非值扩展存储在该列表中的值[1](例如['a', 'b', 'c']变为['a', 'b', 'c', 'd', 'e'])。

  5. 如果该键不存在,只需在字典中使用非[1]值创建一个新键。


查看完整回答
反对 回复 2024-01-24
?
隔江千里

TA贡献1906条经验 获得超10个赞

raw = [

#     <date>      <key>     <val1>   <val2>

  ['2020/10/07', 'AAA123', '19.24', '22.00'],

  ['2020/11/17', 'BBB123', '23.59', '00.00'],

  ['2020/14/67', 'AAA123', '08.00', '16.00'],

]

(稍微编辑您的示例以具有重复的密钥)


听起来你希望你的输出是这样的:


{key: [info, ...], ...}

我们可以这样做:


from collections import defaultdict, namedtuple

Data = namedtuple('Data', ('date', 'val1', 'val2'))

res = defaultdict(list)

for date, key, val1, val2 in raw:

    data = Data(date, val1, val2)

    res[key].append(data)

res = dict(res)  # Strip defaultdict behavior

然后我们可以看到


import pprint

pprint.pprint(res)

给我们一个与期望类似的结果:


{'AAA123': [Data(date='2020/10/07', val1='19.24', val2='22.00'),

            Data(date='2020/14/67', val1='08.00', val2='16.00')],

 'BBB123': [Data(date='2020/11/17', val1='23.59', val2='00.00')]}


查看完整回答
反对 回复 2024-01-24
  • 3 回答
  • 0 关注
  • 36 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信