0

この関数の私の目標は、注文の総コストを出力することです。

{'2': '150.99', '3': '99.50', '15': '5.07'}最初の値がID番号で、2番目の値がそのID番号を持つアイテムの価格であるような辞書を提供する関数が1つあります。したがって、アイテム番号3のコストは99ドル/ユーロ/ポンド/私の単位が何であれ、50セント/サブユニットです。

別の関数は、このように検索するアイテムIDのリストを提供します[2, 2, 3]。ここで、任意のアイテムIDを複数回表示して、そのアイテムを複数購入していることを示すことができます。したがって、この例では、アイテム2の2つをそれぞれ150.99で購入し、アイテム3の1つを99.50で購入します。

アイテムIDのディクショナリ(価格とアイテムIDのリストを検索する)を渡して、リスト内のすべてのアイテムの合計コストを出力する関数を定義したいと思います。したがって、上記の例では、値を出力する必要があり401.48ます(2*150.99)+99.50=401.48

テストとして私は試しました

test = DictionaryVariable.get('2')
print test

これにより、期待値が出力されます(したがって、この例では150.99になります)。

しかし、私のような関数を定義しようとすると

def FindPrice(dictionary, idlist):
    price = 0.00
    for id in idlist:
        price + float(dictionary.get(id))
    return price

そしてそれをこのように呼びます:

Prices = FindPrice(DictionaryVariable, IDListVariable)
print Prices

動作していません-dictionary.get(id)パーツが返さNoneれているようです(floatではなくstrにすることでテストしました)ので、「TypeError:float()引数は文字列または数値である必要があります」というエラーがスローされます。リストからアイテムIDを入力する他の方法を使用する必要があると思いますが、その方法がどうなるかわかりません。なぜdictionary.get(id)リターンするのかはわかりNoneませんが、それでもDictionaryVariable.get('2')私が期待する価値を提供します。

編集:整数や浮動小数点数ではなく、辞書で文字列を使用していることを指摘した有益な投稿のおかげで、これを機能させることができました:

def FindPrice(dictionary, idlist):
    Price = sum(float(dictionary.get(x,0)) for x in idlist)
    return Price
Prices = FindPrice(DictionaryVariable, FunctionThatMakesListofIDs('FileToGetIDsFrom.xml'))
print Prices
4

2 に答える 2

2

get()Noneアイテムが見つからない場合は戻ります。ところで、2番目のオプションの引数をに渡すことができますget()。したがって、idが見つからない場合は、その引数が返されます(この場合は0を渡します)

>>> dic={'2': '150.99', '3': '99.50', '15': '5.07'}
>>> items= ['2', '2', '3'] 
>>> sum(float(dic.get(x,0)) for x in items)  #pass 0 to get in case id is not there
401.48

help(dict.get)

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
于 2012-09-30T18:55:41.440 に答える
2

リスト[2、2、3]には整数が含まれていますが、dictのキーは文字列です。最初にintキーとfloat値を使用して辞書を作成するか、次のように変換することをお勧めします。

>>> d = {'2': '150.99', '3': '99.50', '15': '5.07'}
>>> d = dict((int(k),float(v)) for k, v in d.iteritems())
>>> d
{2: 150.99000000000001, 3: 99.5, 15: 5.0700000000000003}
于 2012-09-30T18:55:44.560 に答える