0

これは簡単に違いないと思いますが、私は Python 初心者なので、助けが必要です。次のようなリストがあります。

foo = [['0.125', '0', 'able'], ['', '0.75', 'unable'], ['0', '0', 'dorsal'], ['0', '0', 'ventral'], ['0', '0', 'acroscopic']]

すべての単語には 1 つまたは 2 つの数字が含まれていることに注意してください。数字の 1 から数字の 2 を引いて、単語と数字の辞書を作成したいと思います。Foo は次のようになります。

foo = {'able','0.125'},{'unable', '-0.75'}...

それはやってみました:

bar=[]
for a,b,c in foo:
   d=float(a)-float(b)
   bar.append((c,d))

しかし、エラーが発生しました:

ValueError: could not convert string to float: 
4

5 に答える 5

3

''文字列に変換できません。

bar = []
for a,b,c in foo:
    d = float(a or 0) - float(b or 0)
    bar.append((c,d))

しかし、それでは辞書にはなりません。あなたが望むために:

bar = {}
for a,b,c in foo:
    d = float(a or 0)-float(b or 0)
    bar[c] = d

または、辞書内包表記を使用した短い方法:

bar = {sublist[2]: float(sublist[0] or 0) - float(sublist[1] or 0) for sublist in foo}
于 2013-07-31T16:26:51.133 に答える
0

その '' のように文字列が空かどうかを検証する条件を追加し、それを 0 に変換します

于 2013-07-31T16:26:32.103 に答える
0

float('')動作しません。0その場合は、ヘルパー関数をお勧めします。

def safefloat(s):
    if not s: 
        return 0.0
    return float(s)

res = {}
for a, b, c in foo:
    res[c] = safefloat(a) - safefloat(b)

内包表記を使用して辞書を 1 行で作成できることに注意してください。

res = dict((c, safefloat(a) - safefloat(b)) for a, b, c in foo)

または Python 2.7+ での辞書内包表記:

res = {c: safefloat(a) - safefloat(b) for a, b, c in foo}
于 2013-07-31T16:27:02.697 に答える
0

これは、場合によっては、それらが空の文字列であるために発生します

d = float(a or '0') - float(b or '0')
于 2013-07-31T16:27:40.393 に答える