Files
MoviePilot/app/utils/structures.py

73 lines
2.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from typing import Dict, List, Set, TypeVar, Any, Union
K = TypeVar("K")
V = TypeVar("V")
class DictUtils:
@staticmethod
def filter_keys_to_subset(source: Dict[K, V], reference: Dict[K, V]) -> Dict[K, V]:
"""
过滤 source 字典,使其键成为 reference 字典键的子集
:param source: 要被过滤的字典
:param reference: 参考字典,定义允许的键
:return: 过滤后的字典,只包含在 reference 中存在的键
"""
if not isinstance(source, dict) or not isinstance(reference, dict):
return {}
return {key: value for key, value in source.items() if key in reference}
@staticmethod
def is_keys_subset(source: Dict[K, V], reference: Dict[K, V]) -> bool:
"""
判断 source 字典的键是否为 reference 字典键的子集
:param source: 要检查的字典
:param reference: 参考字典
:return: 如果 source 的键是 reference 的键子集,则返回 True否则返回 False
"""
if not isinstance(source, dict) or not isinstance(reference, dict):
return False
return all(key in reference for key in source)
class ListUtils:
@staticmethod
def flatten(nested_list: Union[List[List[Any]], List[Any]]) -> List[Any]:
"""
将嵌套的列表展平成单个列表
:param nested_list: 嵌套的列表
:return: 展平后的列表
"""
if not isinstance(nested_list, list):
return []
# 检查是否嵌套,若不嵌套直接返回
if not any(isinstance(sublist, list) for sublist in nested_list):
return nested_list
return [item for sublist in nested_list if isinstance(sublist, list) for item in sublist]
class SetUtils:
@staticmethod
def flatten(nested_sets: Union[Set[Set[Any]], Set[Any]]) -> Set[Any]:
"""
将嵌套的集合展开为单个集合
:param nested_sets: 嵌套的集合
:return: 展开的集合
"""
if not isinstance(nested_sets, set):
return set()
# 检查是否嵌套,若不嵌套直接返回
if not any(isinstance(subset, set) for subset in nested_sets):
return nested_sets
return {item for subset in nested_sets if isinstance(subset, set) for item in subset}