python - 给定字典中的键,提取 x 个先前的键值对
问题描述
我有一本这样的字典:
dict_test ={1: 111, 2: 2222, 3:333, 4:4444, 5:5555, 6:6666,
7: 777, 8: 8888, 9:9999, 10:100010101}
并想创建一个字典的子集,例如给定键 8 的前四个值。因此,生成的预期字典将如下所示:
dict_new ={4:4444, 5:5555, 6:6666, 7: 777, 8: 8888}
我尝试在下面编写一个更通用的函数,在那里我可以更普遍地确定我应该回顾多少以前的值。
def get_x_prev_entries(dictionary: dict, key: str, prev: int):
if key in dictionary:
token = object()
keys = [token]*(prev*-1) + sorted(dictionary) + [token]*diff
print('keys' + str(keys))
new_dict = []
newkeys = []
new_prev= prev
# extract all keys that are between 0 and the specified difference
while new_prev is not 0:
new_prev -= 1
if len(newkeys) == 0:
newkeys= newkeys
else:
newkeys = newkeys.append(keys[keys.index(key)-new_diff])
print(newkeys)
print(new_diff)
new_dict = {k:v for k, v in dictionary.items() if k in newkeys}
return new_dict
else:
print('Key not found')
所以要创建我想要的字典,我最好输入
get_x_prev_entries(dict_test, 8, 4)
但此时我只返回一个空字典。任何意见,将不胜感激。谢谢!
解决方案
使用命令字典
from collections import OrderedDict as od
dict_test ={1: 111, 2: 2222, 3:333, 4:4444, 5:5555, 6:6666, 7: 777, 8: 8888, 9:9999, 10:100010101}
od_dict = od(dict_test)
def get_previous_keys(od_dict, prev=4, given=8):
if given not in od_dict:
return
k, v = [], []
for i in range(given-prev, given):
k.append(i)
v.append(od_dict[i])
return dict(zip(k,v))
print(get_previous_keys(od_dict))
{4: 4444, 5: 5555, 6: 6666, 7: 777}
推荐阅读
- html - 为添加的图像设置最大高度
- php - 如果变量值在laravel刀片中为空,如何显示默认url
- javascript - 如何使用 react.js 从列表拖放到树
- r - 如何使用一个绘图脚本绘制一个数据中存在的多个条件?
- tensorflow - ValueError:张量转换为 dtype float32 的张量请求 dtype int32
- php - 在循环php中命中数据库
- python - 仅过去一年的网络抓取评论
- sql-server - 在开发服务器上,我从那天开始分离一个数据库并附加到另一个驱动器,日志大小成倍增加?
- javascript - Expo / React Native:视频无法调整大小
- javascript - 无法在浏览器中显示图像。在画布标签中动态添加。但能够在检查元素中看到