如何向排序字典中插入多个随机键值对
如何将多个随机键值对插入排序字典的问题是由以下原因引起的:在Python 3.6+中,字典中键的顺序是插入顺序。在旧版本的Python中,无法对字典进行排序。解决方法是先插入新的键值对,然后进行排序。
以下是解决方法的代码示例:
from random import randrange def make_rand_dict(prefix, n_items=2): keys = [prefix + str(i) for i in range(n_items)] return {k: randrange(10) for k in keys} def sort_dict(d): return {k: v for k, v in sorted(d.items())} def main(): original = make_rand_dict("key", n_items=2) original = sort_dict(original) update = make_rand_dict("aye", n_items=2) original.update(update) print("before sort:", original) sorted_combined = sort_dict(original) print("after sort:", sorted_combined) if __name__ == '__main__': main()
运行结果如下:
before sort: {'key0': 9, 'key1': 7, 'aye0': 2, 'aye1': 4} after sort: {'aye0': 2, 'aye1': 4, 'key0': 9, 'key1': 7}
以上代码中,首先使用`make_rand_dict`函数生成一个具有排序和随机键值对的字典。然后使用`original.update(update)`将`update`字典的随机键值对插入到`original`字典中。最后使用`sort_dict`函数对字典进行排序。
如果想要插入不同数量的键值对,可以修改`n_items`参数的值。例如,将`n_items`设置为100,即可插入更多的键值对。
如果希望获得更好的性能,可以仅对键进行排序,而不是对键值对进行排序。因为字典的优势在于插入、删除和查找的速度快,而不是占用内存的效率。只对键进行排序即可,无需对键值对进行排序。
如果遇到了`make_rand_dict() got an unexpected keyword argument 'n_items'`错误,可能是因为代码中的`make_dict`函数被重命名为`make_rand_dict`,以反映其生成随机键值对的功能。
作者还提到想要测量将10个、100个和1000个键值对插入字典的运行时间,并与其他数据结构进行比较。这可以通过修改代码中的参数来实现。
如何将多个随机键值对插入排序字典的问题是由以下内容引起的。
根据上面的描述,我将跳过创建字典的步骤。如果你从非空字典开始,然后运行上面的代码。设置好后,使用bisect
和insert
如下。
new_item = randrange(10) new_key = 'key' + str(new_item) # find the index where to insert idx = bisect.bisect(sort_mydic, (new_key, -1)) # the second argument should be smaller than any value # check if the key is already used or not if idx == len(sort_mydic) or sort_mydic[idx][0] != new_key: sort_mydic.insert(idx, (new_key, new_item)) else: # update the value -- as in dictionary sort_mydic[idx] = (new_key, new_item)
如果需要检索项。
def get_item(key): idx = bisect.bisect(sort_mydic, (key, -1)) if idx == len(sort_mydic) or sort_mydic[idx][0] != key: return None # there is no such item else: return sort_mydic[idx][1]
它引发了“<' not supported between instances of 'int' and 'str for line idx”错误。
修正了拼写错误,抱歉。
如果idx==len(sort_mydic)
,那么使用插入方法将作为追加。没有错误。
排序键的想法需要经常对其进行排序。您可以存储两个数据结构:字典和按键排序的列表,但是...首先使用排序的键有什么好处呢?在任何时候,都应该选择更简单的代码。
我认为:1.对键数组进行排序比对字典进行排序更快。2.排序的键不会使字典更快。3.保持键排序。经常进行排序。->对于排序的键+未排序的字典的速度提升更大。
Java有哈希映射和树映射两种。这是有道理的:stackoverflow.com/questions/2444359/…
你的代码只插入了单个随机对。我需要插入多个随机数,例如100或1000个数字。
Bob,你可以写一个循环。
我添加了一个循环,它只将数字添加到sort_mydic,最终的字典没有排序。
有没有什么原因不能使用OrderedDict来实现这个目的呢?这就是它的目的。可能是这样的(还没有检查它是否编译通过):
from random import randrange
from collections import OrderedDict
mydict = {}
for i in range(10):
mydict['key'+str(i)] = randrange(10)
sort_mydic = OrderedDict(sorted(mydict.items(), key=lambda x: x[1]))
OrderedDict的行为与任何其他字典相同,除了它保证按插入顺序排列,并且可以根据需要重新排列。实际上,可能有一种“更好”的方法来做你想要的事情,而不涉及一个中间的dict。
我之前尝试过,然后我在思考如何将多个随机的键值对插入其中。
你问题的另一半与dict相同-使用update方法。OrderedDict只是具有特定行为的dict。在最后一行发生的是,临时元组列表被创建,当传递给OrderedDict构造函数时,它从中创建一个OrderedDict。你也可以用普通的dict做同样的事情。