#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)
) не будет работать, и вы все равно не сможете создать arandom.choice
изdict_items
объекта.
Ответ №1:
Несколько проблем, указанных в комментариях:
-
На самом деле вы не вызываете
items
. Это должно быть:random.choice(dict2.items())
-
dict2.items()
возвращаетdict_items
объект, который не поддерживает индексацию и не может быть использованrandom.choice
. -
Вы не можете использовать
=
между adict
и atuple
(что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}
>>>