1

辞書のタプルで重複する項目を削除する方法について助けが必要です。

dict of {tuple of (str, str, str, str): int}) -> tuple of (str, None)

ここに辞書があります:

   {('ALPHA', 'BETA', 'GAMMA', 'DELTA'): 5
    ('BETA', 'GAMMA', 'ALPHA', 'DELTA'): 3
    ('DELTA', 'BETA', 'GAMMA', 'ALPHA'): 1
    ('GAMMA', 'DELTA', 'ALPHA', 'BETA'): 3
    ('BETA', 'ALPHA', 'DELTA', 'GAMMA'): 4}

整数は、次のtupleようにグループ化した最初のインデックスの値です。

def rad_type(particle):

   my_dict = {}

   for (k, v) in particle.items():
        if (k[0] in my_dict):
            my_dict[k[0]] += v
        else:
            my_dict[k[0]] = v

   return my_dict

これは以下を返します:

{'ALPHA': 5, 'BETA': 7, 'GAMMA': 3, 'DELTA': 1}

この場合は1である最小値を持っているので'DELTA'、次のように要素を削除したい:

   {('ALPHA', 'BETA', 'GAMMA'): 5
    ('BETA', 'GAMMA', 'ALPHA'): 7
    ('BETA', 'GAMMA', 'ALPHA'): 1
    ('GAMMA', 'ALPHA', 'BETA'): 3}

これにより、次のようになりALPHA = 5, BETA = 8, GAMMA = 3ます。これは、辞書に関して私が本当に必要としているものです。

最小の要素を削除しようとしましたが、機能していませんか?

for (p, v) in my_dict.items():
        if (max(my_dict.values()) / sum(my_dict.values()):
            if (v == min(my_dict.values())):
                del my_dict[p]
        return my_dict

しかし、これはALPHA = 5, BETA = 7, GAMMA = 3

これは辞書を返すので、重複を a で削除し、何もインポートtupleせずに辞書として返すにはどうすればよいですか?

問題はこれに似ています

4

2 に答える 2

1

ここに提案があります..
関数を使用する場合:

def rad_type(particle):

   my_dict = {}

   for (k, v) in particle.items():
        if (k[0] in my_dict):
            my_dict[k[0]] += v
        else:
            my_dict[k[0]] = v

   return my_dict  

関数を使用する別の関数を定義すると、次のようになります。

def filter(dict):
        filter1 = rad_type(dict)
        i = 0
        for k ,val in dict.items():
              dict[k] = filter1[k[0]]
              i +=1
        mini_key = [k for k , val in filter1.items() if val == min([value for key ,  value in filter1.items()])][0] 
        filter2 = {tuple(y for y in key if y != mini_key):value for key, value in dict.items()}
        filter3 = rad_type(filter2)
        return filter3  

この関数を辞書粒子に適用すると、次のようになります。

result = filter(particle)  

出力は次のとおりです。

{'ALPHA': 5, 'BETA': 8, 'GAMMA': 3}
于 2012-11-29T15:49:42.597 に答える
0

ある種のが必要になります。Counterを使用してソリューションを実装しましたCollections.Counterが、Counter を直接インポートできない場合は、自分で実装する必要があります。または、Collections.Counter純粋な python の場合は、ソース コードをCounter独自のソリューションにコピーして、インポートする必要がないようにすることもできます。

def display_results(data):
    ''' Displays the sum of the first entries in a tuple in a given dictionary

    >>> display_results(data)
    ... {'ALPHA': 5, 'BETA': 7, 'GAMMA': 3, 'DELTA': 1}'''

    data = Counter(data)
    count = Counter()
    for i in data:
        count[i[0]] += data[i]
    return count

def process_data(data):
    ''' Generates a new Counter object with the contents of data, minus the least common
    object in the first tuple as defined by display_results().

    >>> data = process_data(data)
    >>> display_results(data)
    {'ALPHA' : 5, 'BETA' : 7, 'GAMMA' : 3} '''

    data = Counter(data)
    count = Counter()
    least_common = display_results(data).most_common()[-1][0]
    for i in data:
        j = list(i)
        j.remove(least_common)
        count[tuple(j)] += data[i]
    return count
于 2012-11-29T15:25:13.640 に答える