web-dev-qa-db-ja.com

辞書の文字列値をint / floatデータ型に変換する方法は?

次の辞書のリストがあります。

list = [ { 'a':'1' , 'b':'2' , 'c':'3' }, { 'd':'4' , 'e':'5' , 'f':'6' } ]

リスト内の各辞書の値をint/floatに変換するにはどうすればよいですか?

したがって、次のようになります。

list = [ { 'a':1 , 'b':2 , 'c':3 }, { 'd':4 , 'e':5 , 'f':6 } ]

ありがとう。

24
siva
for sub in the_list:
    for key in sub:
        sub[key] = int(sub[key])

文字列としてではなくintとしてキャストします。

22
Jim

愛のリストの理解を得た。

[dict([a, int(x)] for a, x in b.items()) for b in list]

注釈:for Python 2「items」の代わりに「iteritems」を使用できるコードのみ

38
Powertieke

それが正確な形式である場合は、リストを調べて辞書を変更できます。

for item in list_of_dicts:
    for key, value in item.iteritems():
        try:
            item[key] = int(value)
        except ValueError:
            item[key] = float(value)

より一般的なものがある場合は、辞書に対して何らかの再帰的な更新を行う必要があります。要素が辞書であるかどうかを確認し、辞書である場合は、再帰更新を使用します。 floatまたはintに変換できる場合は、変換して辞書の値を変更します。このための組み込み関数はなく、非常にい場合があります(通常はisinstanceを呼び出す必要があるため、非Pythonicです)。

4

intfloat、および空の文字列値の可能性を処理するには、次のように、リスト内包表記、辞書内包表記、および条件式の組み合わせを使用します。

dicts = [{'a': '1' , 'b': '' , 'c': '3.14159'},
         {'d': '4' , 'e': '5' , 'f': '6'}]

print [{k: int(v) if v and '.' not in v else float(v) if v else None
            for k, v in d.iteritems()}
               for d in dicts]

# [{'a': 1, 'c': 3.14159, 'b': None}, {'e': 5, 'd': 4, 'f': 6}]

ただし、辞書の内包表記は、バージョン2.7まではPython 2に追加されませんでした。以前のバージョンでは単一の式として実行できますが、dictコンストラクターを使用して記述する必要があります次のように:

# for pre-Python 2.7

print [dict([k, int(v) if v and '.' not in v else float(v) if v else None]
            for k, v in d.iteritems())
                for d in dicts]

# [{'a': 1, 'c': 3.14159, 'b': None}, {'e': 5, 'd': 4, 'f': 6}]

どちらの方法でも、元の辞書をその場で変更するのではなく、リストの新しい辞書を作成することに注意してください(別の方法で行う必要があります)。

1
martineau

「所定の場所で」動作するソリューションを決定する場合は、次のソリューションをご覧ください。

>>> d = [ { 'a':'1' , 'b':'2' , 'c':'3' }, { 'd':'4' , 'e':'5' , 'f':'6' } ]
>>> [dt.update({k: int(v)}) for dt in d for k, v in dt.iteritems()]
[None, None, None, None, None, None]
>>> d
[{'a': 1, 'c': 3, 'b': 2}, {'e': 5, 'd': 4, 'f': 6}]

ところで、キーの順序は標準辞書の動作方法であるため、つまり順序​​の概念がないため、キーの順序は保持されません。

0
Paolo
  newlist=[]                       #make an empty list
  for i in list:                   # loop to hv a dict in list  
     s={}                          # make an empty dict to store new dict data 
     for k in i.keys():            # to get keys in the dict of the list 
         s[k]=int(i[k])        # change the values from string to int by int func
     newlist.append(s)             # to add the new dict with integer to the list
0
raton