Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-删除字典中的多个列表元素_Python_List_Dictionary - Fatal编程技术网

Python-删除字典中的多个列表元素

Python-删除字典中的多个列表元素,python,list,dictionary,Python,List,Dictionary,我有一个简单的Python字典结构,它被用作伪数据库。六个条目的示例如下所示: a={} a['Name'] = ['a','b','c','d','e','f'] a['Number'] = [1 ,2 ,3 ,4 ,5 ,6 ] a['Sum'] = [2 ,1 ,4 ,3 ,6 ,5 ] 字典中的每个键都指一个特定的字段类型,例如名称、数字、总和等,根据该键存储的数据是一个长度为n的列表,其中n是条目数。请注意,列表的长度均为n。此设置允许我轻松访问每个

我有一个简单的Python字典结构,它被用作伪数据库。六个条目的示例如下所示:

a={}
a['Name']   = ['a','b','c','d','e','f']
a['Number'] = [1  ,2  ,3  ,4  ,5  ,6  ]
a['Sum']    = [2  ,1  ,4  ,3  ,6  ,5  ]
字典中的每个键都指一个特定的字段类型,例如名称、数字、总和等,根据该键存储的数据是一个长度为n的列表,其中n是条目数。请注意,列表的长度均为n。此设置允许我轻松访问每个条目的记录,例如,获取我可以使用的所有字段的第三个条目:

a['Name'][2]
a['Number'][2]
a['Sum'][2]
使用dictionary append方法填充此结构非常容易。我的问题是关于删除条目。假设我想删除其中一条记录,但将其余记录保留在同一个字典/列表中,我该怎么做?我的意思是,如何删除第三个条目,使词典和列表现在:

a['Name']   = ['a','b','d','e','f']
a['Number'] = [1  ,2  ,4  ,5  ,6  ]
a['Sum']    = [2  ,1  ,3  ,6  ,5  ]
任何帮助都将不胜感激。这很可能是在我的代码中的某个循环中实现的,即我希望删除第i个条目,而不是始终删除第3个条目。

在这里使用del功能似乎是从列表中删除项目的最简单方法

del a['Name'][nth-item]

有了这种数据结构,没有什么比这更好的了

for v in a.values():
    del v[2]   # or v[n] in general
也许你应该考虑熊猫的任务:

In [69]: import pandas as pd
In [70]: a
Out[70]: 
{'Name': ['a', 'b', 'c', 'd', 'e', 'f'],
 'Number': [1, 2, 3, 4, 5, 6],
 'Sum': [2, 1, 4, 3, 6, 5]}

In [71]: df = pd.DataFrame(a).T

In [72]: df
Out[72]: 
        0  1  2  3  4  5
Name    a  b  c  d  e  f
Number  1  2  3  4  5  6
Sum     2  1  4  3  6  5

[3 rows x 6 columns]

In [73]: del df[2]

In [74]: df
Out[74]: 
        0  1  3  4  5
Name    a  b  d  e  f
Number  1  2  4  5  6
Sum     2  1  3  6  5

[3 rows x 5 columns]

也许有点晦涩,但我喜欢它的短小:

# index to remove
n = 2

a = {k: v[:n] + v[(n + 1):] for k, v in a.items()}
作为一种功能,正如有人建议的那样:

   def del_idx(n):
       return {k: v[:n] + v[(n + 1):] for k, v in a.items()}
编辑:减少列表

a = {k: [i for ids, i in enumerate(v) if ids != n] for k, v in a.items()}

您应该将其编写为一个函数,接受nDoes,一次删除所有第3个或第n个条目?我假设我可以迭代键,例如“Name”、“Number”、“Sum”,以及列表元素,例如“n”,以删除多个条目?您是正确的:。。。只需确保在按索引从列表中删除项目时,您会向后迭代列表以保持正确的索引。谢谢Kevin-我会完全错过向后迭代!不晦涩,但为dict中的每个值创建3个新列表的效率不是很高。你是对的,我太沉迷于理解。如果列表中有重复的值,你的上一个版本将无法正常工作,但仍然很难看。使用pandas是一个整洁的解决方案,尽管我希望坚持使用通用Python代码,即不是pandas