回答編集履歴
4
インポート方法について追記
test
CHANGED
@@ -30,21 +30,59 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
[csvモジュール](https://docs.python.jp/3/library/csv.html)
|
33
|
+
[csvモジュール](https://docs.python.jp/3/library/csv.html)でCSVデータを読み込み、[defaultdictモジュール](https://docs.python.jp/3/library/collections.html#defaultdict-objects)を使ってデータの集計を行います。
|
34
34
|
|
35
35
|
|
36
36
|
|
37
37
|
```python
|
38
38
|
|
39
|
-
|
39
|
+
from collections import defaultdict
|
40
40
|
|
41
|
-
|
41
|
+
import csv
|
42
42
|
|
43
|
-
'B助': {'チビ', '人見知り'},
|
44
43
|
|
45
|
-
'C世': {'マイペース', '人見知り'}
|
46
44
|
|
45
|
+
csv_data = """A子,3年,長身,B助
|
46
|
+
|
47
|
+
A子,3年,スレンダー,C世
|
48
|
+
|
49
|
+
A子,3年,マイペース,D太
|
50
|
+
|
51
|
+
A子,3年,泣き虫,D太
|
52
|
+
|
47
|
-
|
53
|
+
B助,2年,静か,A子
|
54
|
+
|
55
|
+
B助,2年,チビ,D太
|
56
|
+
|
57
|
+
B助,2年,人見知り,D太
|
58
|
+
|
59
|
+
C世,3年,マイペース,A子
|
60
|
+
|
61
|
+
C世,3年,人見知り,D太"""
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
persons = defaultdict(set) # 辞書を定義
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
for row in csv.reader(csv_data.split()):
|
70
|
+
|
71
|
+
persons[row[0]].add(row[2]) # 辞書に各個人の特徴を入れていく
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
"""結果:
|
76
|
+
|
77
|
+
defaultdict(<class 'set'>,
|
78
|
+
|
79
|
+
{'A子': {'スレンダー', '泣き虫', 'マイペース', '長身'},
|
80
|
+
|
81
|
+
'B助': {'人見知り', 'チビ', '静か'},
|
82
|
+
|
83
|
+
'C世': {'人見知り', 'マイペース'}})
|
84
|
+
|
85
|
+
"""
|
48
86
|
|
49
87
|
```
|
50
88
|
|
3
コードを修正
test
CHANGED
@@ -86,17 +86,17 @@
|
|
86
86
|
|
87
87
|
for p in persons:
|
88
88
|
|
89
|
-
print(p, end='
|
89
|
+
print(p, end='')
|
90
90
|
|
91
91
|
for c in characters:
|
92
92
|
|
93
93
|
if c in persons[p]:
|
94
94
|
|
95
|
-
print('○', end='
|
95
|
+
print(',○', end='')
|
96
96
|
|
97
97
|
else:
|
98
98
|
|
99
|
-
print('', end='
|
99
|
+
print(',', end='')
|
100
100
|
|
101
101
|
print('')
|
102
102
|
|
@@ -104,13 +104,13 @@
|
|
104
104
|
|
105
105
|
"""結果:
|
106
106
|
|
107
|
-
名前,人見知り,
|
107
|
+
名前,人見知り,スレンダー,チビ,マイペース,泣き虫,長身
|
108
108
|
|
109
|
-
A子,,
|
109
|
+
A子,,○,,○,○,○
|
110
110
|
|
111
|
-
B助,○,○,,,
|
111
|
+
B助,○,,○,,,
|
112
112
|
|
113
|
-
C世,○,,,,,
|
113
|
+
C世,○,,,○,,
|
114
114
|
|
115
115
|
"""
|
116
116
|
|
@@ -118,7 +118,7 @@
|
|
118
118
|
|
119
119
|
|
120
120
|
|
121
|
-
|
121
|
+
余談ですが、このままだとコードが長いので Python の内包表記というテクニックを使うとシンプルに書けます。
|
122
122
|
|
123
123
|
|
124
124
|
|
2
誤字修正
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
今回、人物:特徴 が 1:n の関係にあり、人物および人物に対する特徴は重複しない(A子さんの特徴は「長身かつ長身」みたいなデータはNG)ので、人物
|
29
|
+
今回、人物:特徴 が 1:n の関係にあり、人物および人物に対する特徴は重複しない(A子さんの特徴は「長身かつ長身」みたいなデータはNG)ので、人物の辞書(dict型)に特徴の集合(set型)を格納するデータフォーマットにするのが良いと思います。
|
30
30
|
|
31
31
|
|
32
32
|
|
1
誤字修正
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
今回、人物:特徴 が 1:n の関係にあり、人物および人物に対する特徴は重複しない(A子さんの特徴は「長身かつ長身」みたいなデータはNG)ので、人物を示す辞書(dict型)に特徴を集合(set型)
|
29
|
+
今回、人物:特徴 が 1:n の関係にあり、人物および人物に対する特徴は重複しない(A子さんの特徴は「長身かつ長身」みたいなデータはNG)ので、人物を示す辞書(dict型)に特徴を集合(set型)を格納するデータフォーマットにするのが良いと思います。
|
30
30
|
|
31
31
|
|
32
32
|
|