Python中的OrderedDict

Python中的OrderedDict

OrderedDict是Python中dict对象的子类。dict和OrderedDict的区别在于,OrderedDict会按照插入时的顺序维护键的顺序,而在dict中,键的顺序不是一个重要的部分。

OrderedDict是标准库类,位于collections模块中。

要使用它,用户需要导入collections标准库模块。

示例:

import collections

在本文中,我们将讨论有关OrderedDict的一些操作,以及Dict与OrderedDict之间的区别。

用户可以在Dict类和OrderedDict类中放入一些键以及大量的与之对应的值。在下面的示例中,我们将展示Dict类的排序可能会变化,但是对于OrderedDict类,排序将保持不变。

示例:

import collections
# we will first create normal dict
print('Dict:')
user_dict = {}
user_dict['PP'] = 10
user_dict['QQ'] = 20
user_dict['RR'] = 30
user_dict['SS'] = 40
user_dict['TT'] = 50
user_dict['UU'] = 60
for item in user_dict.items():
   print(item)
print()
# now, we will create ordered dict
print('OrderedDict:')
user_ordered_dict = collections.OrderedDict()
user_ordered_dict['PP'] = 10
user_ordered_dict['QQ'] = 20
user_ordered_dict['RR'] = 30
user_ordered_dict['SS'] = 40
user_ordered_dict['TT'] = 50
user_ordered_dict['UU'] = 60
for item in user_ordered_dict.items():
   print(item)

输出:

Dict:
('PP', 10)
('QQ', 20)
('RR', 30)
('SS', 40)
('TT', 50)
('UU', 60)

OrderedDict:
('PP', 10)
('QQ', 20)
('RR', 30)
('SS', 40)
('TT', 50)
('UU', 60)

改变特定键的值

在更改特定键的值后, OrderedDict 类的键的顺序不会改变,但在Dict类中,排序可能会改变也可能不会改变。

示例:

import collections
# we will first create normal dict
print('Dict:')
user_dict = {}
user_dict['PP'] = 10
user_dict['QQ'] = 20
user_dict['RR'] = 30
user_dict['SS'] = 40
user_dict['TT'] = 50
user_dict['UU'] = 60
for item in user_dict.items():
   print(item)
#now, we will change the value for key QQ
user_dict['QQ'] = 111
print('After changing value of specific key in Dict')
for item in user_dict.items():
   print(item)
print()
#we will create ordered dict
print('OrderedDict:')
user_ordered_dict = collections.OrderedDict()
user_ordered_dict['PP'] = 10
user_ordered_dict['QQ'] = 20
user_ordered_dict['RR'] = 30
user_ordered_dict['SS'] = 40
user_ordered_dict['TT'] = 50
user_ordered_dict['UU'] = 60
for item in user_ordered_dict.items():
   print(item)
# now, we will change the value for specific key QQ
user_ordered_dict['QQ'] = 111
print('After changing value of specific key in Ordered Dict')
for item in user_ordered_dict.items():
   print(item)

输出:

Dict:
('PP', 10)
('QQ', 20)
('RR', 30)
('SS', 40)
('TT', 50)
('UU', 60)
After changing value of specific key in Dict
('PP', 10)
('QQ', 111)
('RR', 30)
('SS', 40)
('TT', 50)
('UU', 60)

OrderedDict:
('PP', 10)
('QQ', 20)
('RR', 30)
('SS', 40)
('TT', 50)
('UU', 60)
After changing value of specific key in Ordered Dict
('PP', 10)
('QQ', 111)
('RR', 30)
('SS', 40)
('TT', 50)
('UU', 60)

删除和重新插入OrderedDict类中的元素

当我们从OrderedDict类中删除一个元素,然后执行重新插入操作以恢复该特定的键和值时,它将把它推到后面。虽然OrderedDict类在插入过程中保持顺序,但在执行删除过程时,它会删除排序信息,并将重新插入的元素视为新条目。

示例:

import collections
#we will create ordered dict
print('OrderedDict:')
user_ordered_dict = collections.OrderedDict()
user_ordered_dict['PP'] = 10
user_ordered_dict['QQ'] = 20
user_ordered_dict['RR'] = 30
user_ordered_dict['SS'] = 40
user_ordered_dict['TT'] = 50
user_ordered_dict['UU'] = 60
for item in user_ordered_dict.items():
   print(item)
#First we will delete item in key RR
user_ordered_dict.pop('RR')
print('After Deleting the key')
for item in user_ordered_dict.items():
   print(item)
#now, we will re-inserte the item 
user_ordered_dict['RR'] = 30
print('After Re-inserting the key and value')
for item in user_ordered_dict.items():
   print(item)   

输出:

OrderedDict:
('PP', 10)
('QQ', 20)
('RR', 30)
('SS', 40)
('TT', 50)
('UU', 60)
After Deleting the key
('PP', 10)
('QQ', 20)
('SS', 40)
('TT', 50)
('UU', 60)
After Re-inserting the key and value
('PP', 10)
('QQ', 20)
('SS', 40)
('TT', 50)
('UU', 60)
('RR', 30)

如何在OrderedDict的开头插入

当用户想要在OrderedDict类的开头插入一些元素时,他/她可以使用 ‘update’ 方法。

示例:

from collections import OrderedDict
user_ordered_dict = OrderedDict([('Jake', '10'), ('John', '20'), ('Ross', '40')])
print("The current dictionary values are :")
print(user_ordered_dict)
user_ordered_dict.update({'Ryan':'70'})
user_ordered_dict.move_to_end('Ryan', last = False)
print("The updated dictionary values are : ")
print(user_ordered_dict)

在上面的代码中:

  • 首先,我们导入了所需的包。
  • 然后,我们使用OrderedDict创建了一个有序字典。
  • 我们使用 “update” 方法来指定键和其值。
  • 然后,我们使用 “move_to_end” 函数将键和其值移动到末尾。
  • 显示所需的输出。

输出:

The current dictionary values are :
OrderedDict([('Jake', '10'), ('John', '20'), ('Ross', '40')])
The updated dictionary values are : 
OrderedDict([('Ryan', '70'), ('Jake', '10'), ('John', '20'), ('Ross', '40')])

如何使用OrderedDict检查字符串中字符的顺序

如果用户想要检查字符串中字符的顺序,他们可以使用’OrderedDict’方法。让我们来了解下面的示例。

示例:

from collections import OrderedDict
def check_order(user_input, user_pattern):
   user_dict = OrderedDict.fromkeys(user_input)
   pattern_length = 0
   for key,value in user_dict.items():
      if (key == user_pattern[pattern_length]):
         pattern_length = pattern_length + 1
      if (pattern_length == (len(user_pattern))):
         return 'The order of pattern is correct'
   return 'The order of pattern is incorrect'
user_input = 'Hello Jake'
input_pattern = 'Ja'
print("The string is ")
print(user_input)
print("The input pattern is ")
print(input_pattern)
print(check_order(user_input,input_pattern))
user_input = 'Hello Jake'
input_pattern = 'ke'
print("The string is ")
print(user_input)
print("The input pattern is ")
print(input_pattern)
print(check_order(user_input,input_pattern))

在上面的代码中:

  • 首先,我们导入了所需的包。
  • 然后,我们定义了’check_order’方法,该方法将接受两个参数。
  • 然后,我们使用’fromkeys’方法创建了有序字典。
  • 我们将模式的长度初始化为0。
  • 如果键与模式相等,则模式的长度将增加。
  • 但是,如果模式的长度与当前长度相同,则表示顺序正确。否则,顺序不正确。

输出:

The string is 
Hello Jake
The input pattern is 
Ja
The order of pattern is correct
The string is 
Hello Jake
The input pattern is 
ke
The order of pattern is incorrect

结论

在本教程中,我们讨论了有序字典(OrderedDict)以及它与普通字典的区别。我们还解释了用户如何删除、插入有序字典中的元素,并重新排列它们以按照字典顺序排列。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程