-
Notifications
You must be signed in to change notification settings - Fork 0
/
selection.py
97 lines (92 loc) · 3.12 KB
/
selection.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
from parseRelation import isStringFloat
# selection operation
def selection(table: dict, condition: str) -> dict:
# store the result
res = []
# parse condition
parts = condition.split()
column = parts[0]
operator = parts[1]
value = parts[2]
# compare two column
# check if value is the table's column
if value in list(table.keys()):
# get column
column1 = table[column]
column2 = table[value]
# operate
if operator == "=":
for i in range(len(column1)):
if column1[i] == column2[i]:
res.append(i)
elif operator == "!=" or operator == "<>":
for i in range(len(column1)):
if column1[i] != column2[i]:
res.append(i)
elif operator == ">":
for i in range(len(column1)):
if (
column1[i] != None
and column2[i] != None
and column1[i] > column2[i]
):
res.append(i)
elif operator == "<":
for i in range(len(column1)):
if (
column1[i] != None
and column2[i] != None
and column1[i] < column2[i]
):
res.append(i)
elif operator == ">=":
for i in range(len(column1)):
if (
column1[i] != None
and column2[i] != None
and column1[i] >= column2[i]
):
res.append(i)
elif operator == "<=":
for i in range(len(column1)):
if (
column1[i] != None
and column2[i] != None
and column1[i] <= column2[i]
):
res.append(i)
# simple operation
# =, !=, >, <, >=, <=
else:
if isStringFloat(value):
value = float(value)
# get column
column = table[column]
# operate
if operator == "=":
for i in range(len(column)):
if column[i] == value:
res.append(i)
elif operator == "!=" or operator == "<>":
for i in range(len(column)):
if column[i] != value:
res.append(i)
elif operator == ">":
for i in range(len(column)):
if column[i] != None and column[i] > value:
res.append(i)
elif operator == "<":
for i in range(len(column)):
if column[i] != None and column[i] < value:
res.append(i)
elif operator == ">=":
for i in range(len(column)):
if column[i] != None and column[i] >= value:
res.append(i)
elif operator == "<=":
for i in range(len(column)):
if column[i] != None and column[i] <= value:
res.append(i)
# get the needed column
table = {key: [value[i] for i in res] for key, value in table.items()}
return table