出日本記 -Exodus-

働く母、家族でアメリカ移住計画を綴ります

辞書型オブジェクトのリストを操作する

今日の演習(コードは下記)からの備忘録

 

各要素が辞書型のオブジェクトからなるリストを操作する方法。

=リストの各要素が辞書型オブジェクトであるオブジェクトを操作する方法

まず、

辞書型オブジェクトの特徴

  • 辞書はキーと値のペアで保持されている
  • 辞書型のオブジェクトは各要素の順番は保持されない
  • 辞書のキー名を変更するメソッドはないので、新しいキーの名前と変更前の値で新たな要素を追加してから古い要素を削除する

engagement_record['account_key'] = engagement_record['acct']    #辞書に新たな要素を設定(=追加)

del engagement_record['acct']    #古い要素を削除

 

この演習の講義動画:

問題提起の解説↓

youtu.be

コードの解説↓

youtu.be

In [1]:
import unicodecsv
In [2]:
def read_csv(filename):
    with open(filename, 'rb') as f:
        reader = unicodecsv.DictReader(f)
        return list(reader)
In [3]:
enrollments = read_csv('enrollments.csv')
daily_engagement = read_csv('daily_engagement.csv')
project_submissions = read_csv('project_submissions.csv')
In [17]:
### For each of these three tables, find the number of rows in the table and
### the number of unique students in the table. To find the number of unique
### students, you might want to create a set of the account keys in each table.
In [4]:
# Rename the ‘acct’ column to ‘account_key’ in the daily_engagement table
# daily_engagement[0]['account_key']

for engagement_record in daily_engagement:
    engagement_record['account_key'] = engagement_record['acct']
    del engagement_record['acct']
In [5]:
def get_unique_students(data):
    unique_students = set()
    for data_element in data:
        unique_students.add(data_element['account_key'])
    return unique_students
In [6]:
len(enrollments)
Out[6]:
1640
In [7]:
unique_enrolled_students = get_unique_students(enrollments)
len (unique_enrolled_students)
Out[7]:
1302
In [8]:
len(daily_engagement)
Out[8]:
136240
In [9]:
unique_engaged_students = get_unique_students(daily_engagement)
len (unique_engaged_students)
Out[9]:
1237
In [11]:
len(project_submissions)
Out[11]:
3642
In [11]:
unique_project_submitted_students = get_unique_students(project_submissions)
len (unique_project_submitted_students)
Out[11]:
743