【Python】つまづきそうなことをまとめてみる【コードサンプル集】

※こちらのページ内容については随時追加

①ループ内でリストの要素を削除する時の注意点

以下のようにループ内でリストの要素を削除すると要素のインデックスが削除され意図しない挙動になります

>>> lst = [0,1,2,3,4,5,6,7,8,9]
>>> for x in lst:
...     print(x)
...     if x%3 != 0:
...         lst.remove(x)
... 
0
1
3
4
6
7
9
>>> lst
[0, 2, 3, 5, 6, 8, 9]

①の対応策

for x in a[:]:
    if x < 0: a.remove(x)

内包表記を使っても書ける
先程の例だと
lst = [x for x in lst if x%3 == 0]

それかものによるが、単純に別に変数を用意して、そこに必要なものだけappendしてもいいかもしれない

②辞書型のリストから、特定のキーの値を取り出したい

以下のようなリストから特定のキーにアクセスしたいとき

[{'Key': 'Name',     'Value': 'apple'},
 {'Key': 'Color',    'Value': 'red'},
 {'Key': 'Quantity', 'Value': 10}]

②の解決方法

def getValue(key, items):
    values = [x['Value'] for x in items if 'Key' in x and 'Value' in x and x['Key'] == key]
    return values[0] if values else None

# 使用例
items = [{'Key': 'Name',     'Value': 'apple'},
         {'Key': 'Color',    'Value': 'red'},
         {'Key': 'Quantity', 'Value': 10}]
print(getValue('Name', items))
# -> apple

print(getValue('Quantity', items))
# -> 10

print(getValue('hoge', items))
# -> None

③2つのリスト型の辞書をマージする&keyを追加

dict1 = [{'adunit_id':10, 'lineitem_id':'a'},{'adunit_id':20, 'lineitem_id':'c'}]
dict2 = [{'adunit_id':10, 'lineitem_id':'b'},{'adunit_id':30, 'lineitem_id':'d'}]

results_dict1 = {}
results_dict2 = {}

for val in dict1:
    print(val['adunit_id'])
    for val_sec in dict2:
dict1 = [{'test1_id':10, 'test2_id':'a'},{'test1_id':20, 'test2_id':'c'}]
dict2 = [{'test1_id':10, 'test2_id':'b'},{'test1_id':30, 'test2_id':'d'}]

results_dict1 = {}
results_dict2 = {}

for val in dict1:
    print(val['test1_id'])
    for val_sec in dict2:
        if val_sec['test1_id'] == val['test1_id']:
            val['iso_test2_id'] = val_sec['test2_id']
            print('aruyo')

print(dict1)
print(dict2)

④辞書型の値を参照できない(型違い)

test_dict = {4551557473: {
    'test_id': 2190,
    'id': 4551557473,
    'name': 'testname',
    'specialname': 'testorder',
}}
search_id = '4551557473'
print(test_dict[search_id])

・結果
Traceback (most recent call last):
  File "Main.py", line 13, in <module>
    print(test_dict[search_id])
KeyError: '4551557473'

key errorとでるがパット見わからない

④の解決方法

test_dict = {4551557473: {
    'test_id': 2190,
    'id': 4551557473,
    'name': 'testname',
    'specialname': 'testorder',
}}

search_id = '4551557473'
search_id = int(search_id)
print(test_dict[search_id])

・結果
{'orderId': 2190, 'id': 4551557473, 'name': 'testname', 'orderName': 'testorder'}

keyの型に合わせないとエラーになっちゃいますのでキャストして合わせてあげる

type()で型をチェックしたりすると確実

シェアする

  • このエントリーをはてなブックマークに追加

フォローする