-1

私のコードには、zip()関数と組み合わせた2つのリストを持つ辞書があります

self.dict = OrderedDict(zip(self.name,self.unit))

リストは引数として与えられます...var=class([[1,2,4,7],["y","y","t"],[11.1,12.3,6]],name=["num1","letter","num2"])

ある点では、各括弧内の項目に数字のみがあるかどうかをチェックする関数が必要です。たとえばint=[1,2,3] 、それが当てはまる場合、プログラムは各数値のみのリストの平均を計算します。そして、値を num1 = 3.5 num2 = 9.8(表として)出力します:

num1   num2
 3.5    9.8

まず、これを使用して新しいリストを作成します。

for i in range(len(self.unit)):
                    if  all(isinstance(item, (int,float)) for item in self.unit[i]):
                        self.new_l.append(self.unit[i])

その後、(別の関数で) in という名前の新しいリストを作成し、self.sum_l各数値リストの平均をリストの新しいリストに入れます (この例では、2 つの平均を取得します)。

self.sum_l.append([sum(self.new_1[i])/float(len(self.new_1[i]))])

その後、self.nameself.sum_1リスト を使用する新しい辞書を作成します。

 self.nov_slovar = OrderedDict(zip(self.ime, self.seznam_vsot))

これは正常に機能しますが、私が直面している問題は...新しい辞書を作成すると、リストにリストがあるため、コードは新しい辞書を作成するときにリストから多くの要素を取得しnameますself.sum_1。しかし問題は、最初の 2 つが必要だということです (私の場合)。そして、それは出力を絶対に間違ったものにします:

num1   letter
 4.6    9.8

だから私の質問は、それが起こらないようにするために何をすべきかということです。私は多くのことを試しました。辞書で値の合計を計算しようとしても、エラーが発生します

4

2 に答える 2

1
from __future__ import division

self.nov_slovar = {}
for key, value in self.dict.iteritems():
    try:
        self.nov_slovar[key] = sum(value)/len(value)
    except TypeError:  # can't sum non-numbers; skip those
        pass
于 2012-12-06T12:32:25.347 に答える
1

非常に単純なことに対する非常に長い質問です。あなたの質問を正しく受け取ったかどうかはわかりませんが、これは役立つ可能性のあるいくつかのことを示している可能性があります...

import numbers

a = {"title": "num1", "values": [1,2,3,4,5]}
b = {"title": "letter", "values": [1,'b',3,4,5]}

def print_avg(r):
    if all(isinstance(x, numbers.Number) for x in r["values"]):
        print a["title"],":", sum(r["values"])/float(len(r["values"]))

print_avg(a)
>> num1 : 3.0
print_avg(b):
>>
于 2012-12-06T12:34:55.800 に答える