次のコード例では、id
の辞書にその値の2つの数値を持つ辞書result
を作成しています。タプルを値として辞書の値をあらかじめ計算する
# populate the ids list (contents of the current directory which is for a speicif id name)
ids_list = [filename for filename in glob('*' + .txt)
def some_numerical_calc(filename):
# calculates and returns some number as string
def size_of_file(filename):
# calculates and returns size number as string
def count_stuff(id, filename):
result = { id: (some_numerical_calc(filename), size_of_file(filename)) }
for id in ids_list:
for f in files_list:
count_stuff(id, f)
アイデアは私が最終的に1つの辞書(おそらくこの部品は再設計必要。)の下で、これらすべての辞書のキーと値のペアを集約することです。
私が扱っている問題は、特定のid
のfiles_list
が1より大きい場合です。これらのケースでは、それぞれfilename
のタプル内の2つの数値に、それと同じ数値の前の数値を加算したいとします。filename
例として
、
ids_list = ['001', '002', '003']
id='001'
ことがfiles_list=['file1.txt', 'file2.txt', 'file3.txt']
とを有する
some_numerical_calc('file1.txt')
は10
と を与える場合がその後、
some_numerical_calc('file2.txt')
は、150
とsize_of_file('file2.txt')
は35
を与える与え
some_numerical_calc('file3.txt')
が30
とsize_of_file('file3.txt')
は120
を与える与え、、
ことを期待します80
を与え、私はid='001'
の出力はresult = { '001': (190, 235) }
私はtuplesが不変であることを知っています。私は各IDのすべてのファイルの2つの数値を事前に計算して、その特定の辞書項目を作成する実装を考え出すのに苦労しています。あるいは、おそらく、私はnamedtuplesを使用し、set(?)に2つの数値を格納することを望んでいたとしても、タプル構造を削除する必要があります。どんな提案も高く評価されます。
効率的で非平凡な提案のために願っています。
あなたがそれを使用している間、値を変更し、リストを使用するには、設定が完了しているnamedtupleにすべての値をキャスト。代わりに 'file_listのfに対してsome_numerical_calc(f)を使用し、file_listのfについてはsize_of_file(f)'を使用して、それをタプルの2つの値として使用することもできます。 –