Python-删除字典中的多个列表元素
我有一个简单的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。此设置允许我轻松访问每个
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