Перемещение случайного элемента между двумя словарями

#python #dictionary

#python #словарь

Вопрос:

Я хочу взять случайный элемент dict2 и добавить его в dict1 :

 import random
dict1 = {'a':1,'b':2}
dict2 = {'c':3,'d':4}

dict1  = random.choice(dict2.items)
print(dict1)
  

Я получаю эту ошибку:

 Traceback (most recent call last):
  File "C:Users64221Desktopdict_test.py", line 6, in <module>
    dict1  = random.choice(dict2.items)
  File "C:Users64221AppDataLocalProgramsPythonPython38-32librandom.py", line 288, in choice
    i = self._randbelow(len(seq))
TypeError: object of type 'builtin_function_or_method' has no len()
>>> 
  

Комментарии:

1. Отсутствует () на .items -> .items()

2. Также = со случайным элементом (например ('c', 3) ) не будет работать, и вы все равно не сможете создать a random.choice из dict_items объекта.

Ответ №1:

Несколько проблем, указанных в комментариях:

  • На самом деле вы не вызываете items . Это должно быть: random.choice(dict2.items())

  • dict2.items() возвращает dict_items объект, который не поддерживает индексацию и не может быть использован random.choice .

  • Вы не можете использовать = между a dict и a tuple (что items() и выполняется).

Несколько иной подход заключается в выборе случайного ключа и добавлении его к dict1 соответствующему значению из dict2 :

 import random

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}

key = random.choice(list(dict2.keys()))
dict1[key] = dict2[key]
  

Обратите внимание на использование list(dict2.keys()) (которое также может быть просто list(dict2) ). Это связано с тем, что, аналогично items() , keys() возвращает dict_keys объект, который не поддерживает индексацию, поэтому для использования random.choice мы должны сначала внести его в список.


Если вы хотите переместить элемент, то есть удалить из dict1 и добавить в dict2 , просто измените на:

 dict1[key] = dict2.pop(key)
  

Использование pop() метода dicts.

Ответ №2:

Когда вы говорите: «Я пытаюсь переместить случайный элемент …», вы имеете в виду, выбрать случайный элемент dict1 , удалить его dict1 и вставить в dict2 ?

 from random import choice

d1 = {"a": 1, "b": 2, "c": 3}
d2 = {}

key = choice(tuple(d1))
value = d1.pop(key)

d2.update({key: value})

print(d1)
print(d2)
  

Вывод:

 {'b': 2, 'c': 3}
{'a': 1}
>>>