从包含列表的列表中对python进行口述

从包含列表的列表中对python进行口述,python,list,dictionary,Python,List,Dictionary,我创建了一个包含列表的列表 [['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:如果每个列表中的第二个元素存在于多个列表中,我希望它们位于同一

我创建了一个包含列表的列表

[['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:如果每个列表中的第二个元素存在于多个列表中,我希望它们位于同一个键下。

尝试以下操作:

my_dict={}
对于VAL中的子列表:
val_key=子_列表[1]
如果val_在my_dict中输入:
my_dict[val_key]。扩展([sub_list[0]]]+sub_list[2:])
其他:
my_dict[val_key]=[sub_list[0]]+sub_list[2:]
  • 创建一个空字典,将您的值放入其中
  • 检查数据中的所有条目
  • 键入该条目的键(
    sub_list[1]
    ),我们将使用它为词典编制索引
  • 如果该键已经存在,则使用该项的非
    [1]
    值扩展存储在该列表中的值(例如
    ['a','b','c']
    变为
    ['a','b','c','d','e']
  • 如果该键不存在,只需在字典中使用非
    [1]
    值创建一个新键

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

    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
    函数从列表中提取所有唯一值)

    我们可以这样做:

    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')]}
    

    “我希望每个列表(索引1)中的第二个值是字典的键,其余的值是值。”您可以编写代码,获取其中一个列表并生成相应的键吗?您是否可以编写代码以获取这些列表之一并生成适当的值?你能写一些代码来获取键和值并生成一个dict吗?你试着写什么代码?你用它的时候发生了什么?如果每个列表中的第二个元素存在于多个列表中,我希望它们位于同一个键下。“它们”是什么?你能举一个输入数据的例子,其中包含这些匹配的数据,并准确地说明结果dict应该是什么吗?
    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')]}