如何向排序字典中插入多个随机键值对

7 浏览
0 Comments

如何向排序字典中插入多个随机键值对

以下代码在字典中生成随机的键值对,并对字典进行排序。我想知道如何将100个随机的键值对插入已排序的字典中并保持排序。\n

from random import randrange
mydict = {}
for i in range(10):
   mydict['key'+str(i)] = randrange(10)
sort_mydict = sorted(mydict.items(), key=lambda x: x[1])

0
0 Comments

如何将多个随机键值对插入排序字典的问题是由以下原因引起的:在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个键值对插入字典的运行时间,并与其他数据结构进行比较。这可以通过修改代码中的参数来实现。

0
0 Comments

如何将多个随机键值对插入排序字典的问题是由以下内容引起的。

根据上面的描述,我将跳过创建字典的步骤。如果你从非空字典开始,然后运行上面的代码。设置好后,使用bisectinsert如下。

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,最终的字典没有排序。

0
0 Comments

有没有什么原因不能使用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做同样的事情。

0