MCPcopy Create free account
hub / github.com/BYVoid/OpenCC / Dict

Class Dict

data/scripts/common.py:40–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38
39
40class Dict(BaseDict):
41 def load(self, file):
42 self.reverse_preferences = {}
43 super().load(file)
44
45 def iter(self, file):
46 for item in super().iter(file):
47 yield item
48
49 def _iter(self, file):
50 for line_number, line in enumerate(super()._iter(file), start=1):
51 line_text = line.rstrip('\r\n')
52 if line_text.startswith(REVERSE_PREFERENCE_PREFIX):
53 if not hasattr(self, 'reverse_preferences'):
54 self.reverse_preferences = {}
55 fields = line_text[len(REVERSE_PREFERENCE_PREFIX):].split()
56 if len(fields) not in (1, 2):
57 raise ValueError(
58 f'Invalid reverse preference at line {line_number}: {line_text}'
59 )
60 self.reverse_preferences[fields[0]] = fields[-1]
61 yield line
62
63 def sort(self):
64 self.entries.sort(key=lambda e: e['key'])
65
66 def swap(self):
67 dic = {}
68 for entry in self.entries:
69 key = entry['key']
70 for value in entry['values']:
71 if value in dic:
72 dic[value].append(key)
73 else:
74 dic[value] = [key]
75 for key, preferred_value in getattr(self, 'reverse_preferences', {}).items():
76 if key not in dic or preferred_value not in dic[key]:
77 raise ValueError(
78 f'Reverse preference {key} -> {preferred_value} has no matching mapping'
79 )
80 values = dic[key]
81 values.insert(0, values.pop(values.index(preferred_value)))
82 self.entries = [{'key': key, 'values': values} for key, values in dic.items()]
83
84
85class RichDict(Dict):

Callers 2

mainFunction · 0.90
find_target_itemsFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected