У меня возникла проблема с методом deep_update, который должен рекурсивно обновлять словарь, включая объединение наборов при обнаружении. Однако мой модульный тест не удался именно в случае с множествами. Это функция
@staticmethod
def deep_update(main_dict: Dict, update_dict: Dict) -> None:
"""
深度更新字典
:param main_dict: 原始字典
:param update_dict: 新字典
:return: 更新后的字典
>>> dict1 = {'a': {'b': 1}}
>>> UseDict.deep_update(dict1, {'a': {'c': 2}})
>>> assert dict1 == {'a': {'b': 1, 'c': 2}}
"""
for key, value in update_dict.items():
if key in main_dict:
main_value = main_dict[key]
# Deep update for nested dictionaries
if isinstance(main_value, dict) and isinstance(value, dict):
UseDict.deep_update(main_value, value)
# Concatenate lists
elif isinstance(main_value, list) and isinstance(value, list):
main_dict[key] = main_value + value
# Union sets
elif isinstance(main_value, set) and isinstance(value, set):
main_dict[key] = main_value | value
# Concatenate tuples
elif isinstance(main_value, tuple) and isinstance(value, tuple):
main_dict[key] = main_value + value
else:
# Update primitive types or handle other types directly
main_dict[key] = value
else:
# If key doesn't exist in main_dict, add it
main_dict[key] = value
return main_dict
Эти примеры работают нормально. Но модульный тест для набора и кортежей этого не делает:
Примеры:
# Example 1: Deep update with nested dictionaries
main_dict = {'a': {'b': 1}}
update_dict = {'a': {'c': 2}}
print("Input (Nested Dicts):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
UseDict.deep_update(main_dict, update_dict)
print("Updated Dictionary (Nested Dicts):", main_dict)
# Expected Output: {'a': {'b': 1, 'c': 2}}
# Example 2: Deep update with lists
main_dict = {'a': [1, 2]}
update_dict = {'a': [3, 4]}
print("\nInput (Lists):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
UseDict.deep_update(main_dict, update_dict)
print("Updated Dictionary (Lists):", main_dict)
# Expected Output: {'a': [1, 2, 3, 4]}
# Example 3: Deep update with sets
main_dict = {'a': {1, 2}}
update_dict = {'a': {3, 4}}
print("\nInput (Sets):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
answer = UseDict.deep_update(main_dict, update_dict)
print(answer)
# print("Updated Dictionary (Sets):", main_dict)
# Expected Output: {'a': {1, 2, 3, 4}}
# Example 4: Deep update with tuples
main_dict = {'a': (1, 2)}
update_dict = {'a': (3, 4)}
print("\nInput (Tuples):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
UseDict.deep_update(main_dict, update_dict)
print("Updated Dictionary (Tuples):", main_dict)
# Expected Output: {'a': (1, 2, 3, 4)}
Тесты:
def test_deep_update():
# Test with nested dictionaries
main_dict = {'a': {'b': 1}}
update_dict = {'a': {'c': 2}}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': {'b': 1, 'c': 2}}
# Test with lists
main_dict = {'a': [1, 2]}
update_dict = {'a': [3, 4]}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': [1, 2, 3, 4]}
# Test with sets
main_dict = {'a': {1, 2}}
update_dict = {'a': {3, 4}}
UseDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': {1, 2, 3, 4}}
# Test with tuples
main_dict = {'a': (1, 2)}
update_dict = {'a': (3, 4)}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': (1, 2, 3, 4)}
# Test with conflicting types (dict vs list)
main_dict = {'a': {'b': 1}}
update_dict = {'a': [2, 3]}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': [2, 3]} # List should replace the dict
Ожидается для наборов:
assert main_dict == {'a': {1, 2, 3, 4}}
Ожидается для кортежей:
assert main_dict == {'a': (1, 2, 3, 4)}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-behavio
Модульный тест не выполнен для метода deep_update с наборами и кортежами – неожиданное поведение ⇐ Python
Программы на Python
1731593092
Anonymous
У меня возникла проблема с методом deep_update, который должен рекурсивно обновлять словарь, включая объединение наборов при обнаружении. Однако мой модульный тест не удался именно в случае с множествами. Это функция
@staticmethod
def deep_update(main_dict: Dict, update_dict: Dict) -> None:
"""
深度更新字典
:param main_dict: 原始字典
:param update_dict: 新字典
:return: 更新后的字典
>>> dict1 = {'a': {'b': 1}}
>>> UseDict.deep_update(dict1, {'a': {'c': 2}})
>>> assert dict1 == {'a': {'b': 1, 'c': 2}}
"""
for key, value in update_dict.items():
if key in main_dict:
main_value = main_dict[key]
# Deep update for nested dictionaries
if isinstance(main_value, dict) and isinstance(value, dict):
UseDict.deep_update(main_value, value)
# Concatenate lists
elif isinstance(main_value, list) and isinstance(value, list):
main_dict[key] = main_value + value
# Union sets
elif isinstance(main_value, set) and isinstance(value, set):
main_dict[key] = main_value | value
# Concatenate tuples
elif isinstance(main_value, tuple) and isinstance(value, tuple):
main_dict[key] = main_value + value
else:
# Update primitive types or handle other types directly
main_dict[key] = value
else:
# If key doesn't exist in main_dict, add it
main_dict[key] = value
return main_dict
Эти примеры работают нормально. [b]Но модульный тест для набора и кортежей этого не делает[/b]:
Примеры:
# Example 1: Deep update with nested dictionaries
main_dict = {'a': {'b': 1}}
update_dict = {'a': {'c': 2}}
print("Input (Nested Dicts):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
UseDict.deep_update(main_dict, update_dict)
print("Updated Dictionary (Nested Dicts):", main_dict)
# Expected Output: {'a': {'b': 1, 'c': 2}}
# Example 2: Deep update with lists
main_dict = {'a': [1, 2]}
update_dict = {'a': [3, 4]}
print("\nInput (Lists):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
UseDict.deep_update(main_dict, update_dict)
print("Updated Dictionary (Lists):", main_dict)
# Expected Output: {'a': [1, 2, 3, 4]}
# Example 3: Deep update with sets
main_dict = {'a': {1, 2}}
update_dict = {'a': {3, 4}}
print("\nInput (Sets):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
answer = UseDict.deep_update(main_dict, update_dict)
print(answer)
# print("Updated Dictionary (Sets):", main_dict)
# Expected Output: {'a': {1, 2, 3, 4}}
# Example 4: Deep update with tuples
main_dict = {'a': (1, 2)}
update_dict = {'a': (3, 4)}
print("\nInput (Tuples):")
print("Main Dictionary:", main_dict)
print("Update Dictionary:", update_dict)
UseDict.deep_update(main_dict, update_dict)
print("Updated Dictionary (Tuples):", main_dict)
# Expected Output: {'a': (1, 2, 3, 4)}
Тесты:
def test_deep_update():
# Test with nested dictionaries
main_dict = {'a': {'b': 1}}
update_dict = {'a': {'c': 2}}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': {'b': 1, 'c': 2}}
# Test with lists
main_dict = {'a': [1, 2]}
update_dict = {'a': [3, 4]}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': [1, 2, 3, 4]}
# Test with sets
main_dict = {'a': {1, 2}}
update_dict = {'a': {3, 4}}
UseDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': {1, 2, 3, 4}}
# Test with tuples
main_dict = {'a': (1, 2)}
update_dict = {'a': (3, 4)}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': (1, 2, 3, 4)}
# Test with conflicting types (dict vs list)
main_dict = {'a': {'b': 1}}
update_dict = {'a': [2, 3]}
useDict.deep_update(main_dict, update_dict)
assert main_dict == {'a': [2, 3]} # List should replace the dict
Ожидается для наборов:
assert main_dict == {'a': {1, 2, 3, 4}}
Ожидается для кортежей:
assert main_dict == {'a': (1, 2, 3, 4)}
Подробнее здесь: [url]https://stackoverflow.com/questions/79185006/unit-test-fails-for-deep-update-method-with-sets-and-tuples-unexpected-behavio[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия