forked from tue-mdse/genderComputer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dictUtils.py
146 lines (107 loc) · 3.36 KB
/
dictUtils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
"""Copyright 2012-2013
Eindhoven University of Technology
Bogdan Vasilescu
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>."""
"""Some useful utilities for working with dictionaries"""
import pickle
def isList(obj):
"""isList(obj) -> Returns true if obj is a Python list.
This function does not return true if the object supplied
is a UserList object.
"""
return type(obj)==list
def isTuple(obj):
"isTuple(obj) -> Returns true if obj is a Python tuple."
return type(obj)==tuple
def isPySeq(obj):
"""isPySeq(obj) -> Returns true if obj is a Python list or a Python tuple.
This function does not return true if the object supplied is
a UserList object.
"""
return isList(obj) or isTuple(obj)
def isLongString(obj):
"""isLongString(obj) -> Returns true if obj is a string of a size larger than 1.
This function does not return true if the object supplied is
a UserString object.
"""
return type(obj)==str and len(obj)>1
class MyDict:
def __init__(self, path=None, encod=None):
self.data = {}
if path is not None:
fdict = open(path, "rb")
if encod is not None:
dict1 = pickle.load(fdict, encoding=encod)
else:
dict1 = pickle.load(fdict)
print("Loaded dictionary from %s" % path)
fdict.close()
self.data = dict1
def update(self, dictionary=None):
if dictionary is not None:
for k, v in dictionary.items():
self.data[k] = v
def keys(self):
return self.data.keys()
def items(self):
return self.data.items()
def values(self):
return self.data.values()
def append(self, key, value):
try:
self.data[key].append(value)
except:
self.data[key] = []
self.data[key].append(value)
def save(self, path):
fdict = open(path, "wb")
pickle.dump(self.data, fdict)
print("Wrote dictionary to %s" % path)
fdict.close()
def saveAsCSV(self, path):
f = open(path, 'w')
for key in self.keys():
row = []
rs = ''
vs = ''
if isTuple(key):
for item in list(key):
row.append(item)
else:
row.append(key)
values = []
if isList(self.data[key]):
for v in self.data[key]:
values.append(str(v))
else:
values.append(str(self.data[key]))
vs = ', '.join(values)
rs = '; '.join(row)
rs += '; '
rs += vs
f.write('%s\n' % rs)
f.close()
print("Wrote dictionary to %s" % path)
def __getitem__(self, key):
if key in self.data:
return self.data[key]
if hasattr(self.__class__, "__missing__"):
return self.__class__.__missing__(self, key)
raise KeyError(key)
def __setitem__(self, key, item):
self.data[key] = item
def get_key(self, value):
"""find the key(s) as a list given a value"""
return [item[0] for item in self.items() if value in item[1]][0]
def get_value(self, key):
"""find the value given a key"""
return self[key]