回答編集履歴

4

インポート方法について追記

2017/09/07 01:46

投稿

miyahan
miyahan

スコア3095

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
- persons = {
39
+ from collections import defaultdict
40
40
 
41
- 'A子': {'長身', 'スレンダー', 'マイペース', '泣き虫'},
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

コードを修正

2017/09/07 01:46

投稿

miyahan
miyahan

スコア3095

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
- ただだとコードが長いですし、最後にカンマが入ってしまう不具合もあるので Python の内包表記というテクニックを使うとシンプルに書けます。
121
+ 余談ですが、のままだとコードが長いので Python の内包表記というテクニックを使うとシンプルに書けます。
122
122
 
123
123
 
124
124
 

2

誤字修正

2017/09/07 01:38

投稿

miyahan
miyahan

スコア3095

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
 

1

誤字修正

2017/09/06 01:41

投稿

miyahan
miyahan

スコア3095

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