python OrderedDict函数详细介绍和字典详细使用

1、定义
python中字典Dict是利用hash存储,因为各元素之间没有顺序。OrderedDict听名字就知道他是 按照有序插入顺序存储 的有序字典。 除此之外还可根据key, val进行排序。

2、初始化
  2.1 先初始化定义一个OrderedDict,然后按照键值对插入,此时dict可以记录插入字典的顺序
 

import collections
d = collections.OrderedDict()
d["name"] = "muya"
d["age"] = 25
d["money"] = "Zero"
 
for key, value in d.items():
    print(key, value)
 
# 输出:
# name muya
# age 25
# money Zero

 2.2  在定义时初始化好键值对,但这些初始化的内容无法实现有序。不过之后再对该字典进行插入的键值仍然是有序的。

import collections
 
d = collections.OrderedDict(name="muya", age=25, money="Zero")
d["dream"] = "have money"
d["other dream"] = "have gf"
 
for key, value in d.items():
    print(key, value)
 
# 输出:
# money Zero
# age 25
# name muya
# dream have money
# other dream have gf

3、排序

    OrderedDict可根据key 或者val 进行排序。

 1 dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
 2 # 按key排序
 3 kd = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
 4 print kd
 5 # 按照value排序
 6 vd = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))
 7 print vd
 8 
 9 # 输出
10 OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
11 OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

常用函数

import collections
 
dic = collections.OrderedDict()
 
 
# clear(清空有序字典)
dic.clear()
 
# copy(拷贝)
new_dic = dic.copy()
 
# fromkeys(指定一个列表,把列表中的值作为字典的key,生成一个字典)
name = ['tom','lucy','sam']
dic.fromkeys(name)
dic.fromkeys(name,20)
 
# items(返回由“键值对组成元素“的列表)
dic.items()
 
# keys(获取字典所有的key)
dic.keys()
 
# values(获取字典所有的value,返回一个列表)
dic.value()
 
# move_to_end(指定一个key,把对应的key-value移到最后)
dic["name"] = "muya"
dic["age"] = 25
dic["money"] = "Zero"
dic.move_to_end("name")    # 将name移到最后
dic.move_to_end("money", last=False)   # 设置last为False, 将money移到最前面
 
# pop(获取指定key的value,并在字典中删除)
dic.pop("name")           # 删除name, 注意必须指定关键字key
 
# popitem(按照后进先出原则,删除最后加入的元素,返回key-value)
dic.popitem()            # 删除最后加入的
dic.popitem(last=False)  # 删除第一个加入的
 
 
# setdefault(获取指定key的value,如果key不存在,则创建)
val = dic.setdefault('k5')

5、与Dict区别

常规的Dict被设计为非常擅长映射操作。 跟踪插入顺序是次要的
OrderedDict旨在擅长重新排序操作。 空间效率、迭代速度和更新操作的性能是次要的
OrderedDict在频繁的重排任务中还是比Dict更好,这使他更适用于实现各种 LRU 缓存
OrderedDict类的 popitem() 方法有不同的签名。它接受一个可选参数来指定弹出哪个元素
        弹出最后面元素:常规的Dict使用 d.popitem()  ,OrderedDict类使用od.popitem() 

        弹出第一个元素:常规的Dict使用 (k := next(iter(d)), d.pop(k))  ,OrderedDict类使用od.popitem(last=False)

类有一个 move_to_end() 方法,可以有效地将元素移动到任一端
        将K,V对移到最后面:常规的Dict使用 d[k] = d.pop(k)  ,OrderedDict类使用od.move_to_end(k, last=True)   

       将K,V对移到最前面:常规的Dict没有对应功能,OrderedDict类使用od.move_to_end(k, last=False)    

3、字典排序

    # 声明字典
    key_value ={}     
 
    # 初始化
    key_value[2] = 56       
    key_value[1] = 2 
    key_value[5] = 12 
    key_value[4] = 24
    key_value[6] = 18      
    key_value[3] = 323 
    # sorted(key_value) 返回重新排序的列表
    # 字典按键排序
    for i in sorted (key_value) : 
        print ((i, key_value[i]), end =" ") 
执行以上代码输出结果为:

按键(key)排序:
(1, 2) (2, 56) (3, 323) (4, 24) (5, 12) (6, 18) 


    print ("按值(value)排序:")   
    print(sorted(key_value.items(), key = lambda kv:(kv[1], kv[0]))) 
执行以上代码输出结果为:

按值(value)排序:
[(1, 2), (5, 12), (6, 18), (4, 24), (2, 56), (3, 323)]


实例 3 : 字典列表排序
lis = [{ "name" : "Taobao", "age" : 100},  
{ "name" : "Runoob", "age" : 7 }, 
{ "name" : "Google", "age" : 100 }, 
{ "name" : "Wiki" , "age" : 200 }] 
  
# 通过 age 升序排序
print ("列表通过 age 升序排序: ")
print (sorted(lis, key = lambda i: i['age']) )
  
print ("\r") 
  
# 先按 age 排序,再按 name 排序
print ("列表通过 age 和 name 排序: ")
print (sorted(lis, key = lambda i: (i['age'], i['name'])) )
  
print ("\r") 
  
# 按 age 降序排序
print ("列表通过 age 降序排序: ")
print (sorted(lis, key = lambda i: i['age'],reverse=True) )
执行以上代码输出结果为:

列表通过 age 升序排序: 
[{'name': 'Runoob', 'age': 7}, {'name': 'Taobao', 'age': 100},
 {'name': 'Google', 'age': 100}, {'name': 'Wiki', 'age': 200}]

列表通过 age 和 name 排序: 
[{'name': 'Runoob', 'age': 7}, {'name': 'Google', 'age': 100},
 {'name': 'Taobao', 'age': 100}, {'name': 'Wiki', 'age': 200}]

列表通过 age 降序排序: 
[{'name': 'Wiki', 'age': 200}, {'name': 'Taobao', 'age': 100},
 {'name': 'Google', 'age': 100}, {'name': 'Runoob', 'age': 7}]

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: `unique` 函数并不是 Python 自带的,如果你想要求列表中的唯一值,你可以使用 `set` 数据类型。 例如: ``` >>> a = [1, 2, 3, 1, 2, 3, 4] >>> set(a) {1, 2, 3, 4} ``` 注意:`set` 的结果是无序的,如果你想要保持顺序,你可以使用 `collections` 模块中的 `OrderedDict`。 例如: ``` >>> from collections import OrderedDict >>> a = [1, 2, 3, 1, 2, 3, 4] >>> list(OrderedDict.fromkeys(a).keys()) [1, 2, 3, 4] ``` ### 回答2: 在Python中,可以使用unique函数来获取一个列表中的唯一元素,即去除重复的元素。 使用unique函数的步骤如下: 1. 导入必要的模块或库。 2. 定义一个列表,其中包含重复元素。 3. 使用unique函数对列表进行处理,得到去重后的列表。 具体的代码示例如下: ```python # 导入必要的模块或库 from collections import Counter # 定义一个包含重复元素的列表 lst = [1, 2, 3, 3, 3, 4, 4, 5] # 使用unique函数对列表进行处理,得到去重后的列表 unique_lst = list(Counter(lst)) # 输出去重后的列表 print(unique_lst) ``` 上述代码中,首先通过`from collections import Counter`语句导入了Counter类,Counter类在collections模块中,可以用于统计列表中元素出现的次数。然后,定义了一个包含重复元素的列表lst。最后,通过`unique_lst = list(Counter(lst))`语句使用Counter类对列表lst进行处理,得到去重后的列表unique_lst。最后,通过`print(unique_lst)`语句输出去重后的列表。 使用unique函数可以方便地对列表进行去重操作,去除掉重复的元素,以便后续的数据处理和分析。 ### 回答3: Python中的unique函数是用于去除列表中重复的元素的一个函数。它的使用方法如下: 首先,要导入from collections import Counter这个模块。 然后,可以通过调用Counter方法将列表转换成一个Counter字典对象,这个字典对象中存储了列表中各元素出现的次数。 接下来,通过使用字典的keys()方法获取到这个字典中所有的键(即原列表中的元素),并将其转换成一个新的列表。 这样,得到的新列表就是原列表中去除了重复元素的结果。 下面是一个具体的代码示例: from collections import Counter def unique(lst): return list(Counter(lst).keys()) # 测试 lst = [1, 2, 2, 3, 4, 4, 5] result = unique(lst) print(result) 运行结果为:[1, 2, 3, 4, 5] 这样,就可以使用Python中的unique函数将列表中的重复元素去除掉,得到一个新的不含重复元素的列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值