Python中删除字典中键值对的方法

Posted 喜气youngyoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中删除字典中键值对的方法相关的知识,希望对你有一定的参考价值。

方法一:dic.pop('key', 默认值)

## pop移除的键存在时,返回键对应的值
dic = '1':'node1','2':'node2'
print(dic.pop('1', None)) # node1
print(dic) # '2': 'node2'

## pop移除的键不存在,则返回默认值
dic = '1':'node1','2':'node2'
print(dic.pop('3', None)) # None
print(dic) # '1': 'node1', '2': 'node2'

1、字典的pop方法可以将字典键所对应的值给删除掉,但因为字典中键和值是映射关系,该键所对应的值被删除了,则该键也会从字典中移除。

2、pop方法会返回被移除键对应的值。

3、若pop方法想移除的键不存在,则返回默认值。

方法二:使用Python关键字del移除字典中的键值对

## 必须保证要移除的键存在
dic = '1':'node1','2':'node2'
del dic['1']
print(dic) # '2': 'node2'

## 若移除的键存在,则会报异常KeyError
dic = '1':'node1','2':'node2'
del dic['3'] # 报异常KeyError: '3'
print(dic)

1、del关键字只有一个作用,就是将一个对象从内存中彻底地删除掉。

2、由于字典的键与值映射关系,彻底地从内存中删除值 del dic['key'],意味着值所对应的键也将被移除。

3、由于当字典中不存在指定的键时,dic['key']会报异常KeyError,所以必须保证要移除的键在字典中是存在的。

 方法三:使用dic.clear()方法

dic = '1':'node1','2':'node2'
dic.clear()
print(dic) # 

dic.clear()方法会将dic字典中的所有键值对都移除掉,最后得到一个空字典。 

删除字典中多个键值对的方法: 

1、使用for循环遍历要删除的键

dic = '3': 'node3', '4': 'node4', '5': 'node5', '1': 'node1', '2': 'node2'
l = ['1', '3', '5']
for k in l:
  dic.pop(k, None)
print(dic) # '4': 'node4', '2': 'node2'

## 键不存在也可使用
dic = '3': 'node3', '4': 'node4', '5': 'node5', '1': 'node1', '2': 'node2'
l = ['1', '3', '5', '7']
for k in l:
  dic.pop(k, None)
print(dic) # '4': 'node4', '2': 'node2'

 2、使用map函数

## 要删除的键不存在时返回None
dic = '3': 'node3', '4': 'node4', '5': 'node5', '1': 'node1', '2': 'node2'
arr = ['1', '3', '5', '7']
res = map(dic.pop, arr)

反转字典中键值对的顺序(Python)[重复]

【中文标题】反转字典中键值对的顺序(Python)[重复]【英文标题】:Reversing the order of key-value pairs in a dictionary (Python) [duplicate] 【发布时间】:2015-11-13 14:53:43 【问题描述】:

如何在 Python 中反转字典键值对的顺序?例如,我有这本字典:

"a":1, "b":2, "c":3

我想把它倒过来让它返回:

"c":3, "b":2, "a":1

有没有我没听说过的功能可以做到这一点?一些代码行也很好。

【问题讨论】:

【参考方案1】:

字典没有任何顺序感,因此您的键/值对不以任何格式排序。

如果你想保留键的顺序,你应该从一开始就使用collections.OrderedDict,而不是使用普通的字典,示例-

>>> from collections import OrderedDict
>>> d = OrderedDict([('a',1),('b',2),('c',3)])
>>> d
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

OrderedDict 将保留键输入字典的顺序。在上述情况下,它将是列表中存在的键的顺序 - [('a',1),('b',2),('c',3)] - 'a' -> 'b' -> 'c'

然后你可以使用 reversed(d) 获得键的相反顺序,示例 -

>>> dreversed = OrderedDict()
>>> for k in reversed(d):
...     dreversed[k] = d[k]
...
>>> dreversed
OrderedDict([('c', 3), ('b', 2), ('a', 1)])

【讨论】:

是的,正确,这不是重点,它的排序会排序它,OP不想sort,OP想要逆序的键。 这不适用于 Python 3.6 及更高版本。字典现在保持秩序【参考方案2】:

字典使用 Hashmap 来存储 Key 和对应的值。

看:Is a Python dictionary an example of a hash table?

任何与哈希相关的东西都没有顺序。

你可以这样做:

d = 
d['a']=1
d['b']=2
d['c']=3
d['d']=4
print d
for k,v in sorted(d.items(),reverse = True):
    print k,v

d.items() 返回一个元组列表:[('a', 1), ('c', 3), ('b', 2), ('d', 4)]k,v 获取元组中的值以循环迭代。 sorted() 返回一个排序列表,而您不能 use d.items().sort() 不返回,而是尝试覆盖 d.items()

【讨论】:

【参考方案3】:

这会奏效。 基于 Venkateshwara 的“原样”对我不起作用。

def reverse(self):
    a = self.yourdict.items()
    b = list(a) # cast to list from dict_view
    b.reverse() # actual reverse
    self.yourdict = dict(b) # push back reversed values

【讨论】:

【参考方案4】:
d="a":1, "b":2, "c":3
x=
for i in sorted(d.keys(),reverse=True):
    x[i]=d[i]
print(x)

【讨论】:

【参考方案5】:
#The dictionary to be reversed
dict = "key1":"value1","key2":"value2","key3":"value3"

#Append the keys of the dictionary in a list
list_keys = []
for k in dict.keys():
    list_keys.append(k)

rev_dict = 
#Traverse through the reversed list of keys and add them to a new dictionary
for i in reversed(list_keys):
    rev_dict[i] = dict[I]
print(rev_dict)

#OUTPUT: 'key3': 'value3', 'key2': 'value2', 'key1': 'value1'

【讨论】:

以上是关于Python中删除字典中键值对的方法的主要内容,如果未能解决你的问题,请参考以下文章

python字典中键值对的值为中文,打印成转义字符,怎么解决

Python字典键值对的添加和遍历

替换对象中键值对的Python函数返回意外输出[重复]

Python——字典与字典方法

Python字典_术语

python字典操作函数