【作業幫】(數據開發工程師-面試)統計字符串出現的次數以及其對應的值的和【Python】

題目描述

已知列表如下,統計列表中第一列中的字符串出現的次數以及其對應值的和

a,1
b,2
c,3
a,2
b,3

輸出

[[‘b’, 2, 5], [‘c’, 1, 3], [‘a’, 2, 3]]

方法一:最直觀,‘簡單’(當下只能想到這樣的笨辦法…)

# 列表
A = [['a',1],['b',2],['c',3],['a',2],['b',3]]
L = []
# 將第一列提取爲列表
for i in range(len(A)):
    L.append(A[i][0])
# print(L)
# 使用集合去重複
SA = set(L)
# print (SA)
Pr = []
# 統計每個字符串出現的次數
for a in SA:
    Pr.append(L.count(a))
# print(Pr)
# 將集合轉換爲列表
SA2 = list(SA)
# print ('SA2',SA2)
# 創建空列表
Last = [[0]*len(SA2) for i in range(3)]
for i in range(len(Pr)):
    Last[i][0],Last[i][1] = SA2[i],Pr[i]
    sum = 0
    for x in range (len(A)):
        if SA2[i] == A[x][0]:
            sum += A[x][1]
    Last[i][2] = sum
print (Last)

面試結束後查詢了字典(鍵值對)相加的相關方法,如下:

字典求和

題目:python合併字典,相同的key的value如何相加
使用函數實現,結合reduce函數實現多個相加
使用類實現加號對不限制個數的字典相加

'''
1    方法單個相加實現
'''
x = {'apple': 1, 'banana': 2}
y = {'banana': 10, 'pear': 11}

def func(dict1, dict2):
    for i, j in dict2.items():
        if i in dict1.keys():
            dict1[i] += j
        else:
            dict1[i] = j
            # 或:
            # dict1.update({f'{i}': dict2[i]})
    return dict1

print(func(x, y))

'''
2    方法多個相加的實現
'''
from functools import reduce

x = {'apple': 1, 'banana': 2}
y = {'banana': 10, 'pear': 11}
z = {'pear': 5, 'tudou': 22}

def func(dict1, dict2):
    for i, j in dict2.items():
        if i in dict1.keys():
            dict1[i] += j
        else:
            dict1.update({f'{i}': dict2[i]})
    return dict1

print(reduce(func, [x, y, z]))
'''
3   使用面向對象來實現多個相加
'''
x = {'apple': 1, 'banana': 2}
y = {'banana': 10, 'pear': 11}
z = {'pear': 5, 'tudou': 22}

class Fruit(object):
    def __init__(self, kwargs):
        dict1 = kwargs
        self.mydict = kwargs
        for i, j in kwargs.items():
            # self.i = j                  #返回self.2 = 10  ;此語句無法成功賦值,故隱藏
            setattr(self, i, j)  # 其實就是考察setattr函數知不知道

    def __add__(self, other):
        for m, n in other.mydict.items():
            if m in self.mydict.keys():
                self.mydict[m] += n
            else:
                self.mydict.update({f'{m}': other.mydict[m]})
        result = self.mydict
        return Fruit(result)

if __name__ == '__main__':
    x = Fruit(x) + Fruit(y) + Fruit(z)
    print(x.mydict)
    print(x.banana)

'''
結果:
{'apple': 1, 'banana': 12, 'pear': 16, 'tudou': 22}
'''

列表內字典值相加

info= [{'name':'apple','value':2},{'name':'orange','value':5},{'name':'apple','value':5}]
info_dic={}
print (info_dic)
for d in info:
   if d['name'] not in info_dic:
      info_dic[d['name']]=d['value']
   else: info_dic[d['name']]+=d['value']
new_info=[]
for n,v in info_dic.items():
   new_info.append({'name':n,'value':v})
print(new_info)

列表,使用字典方法實現對應值相加

考慮還是想對列表內的字符串對應的值想加。但是無法統計字符串出現的順序

info= [{'name':'apple','value':2},{'name':'orange','value':5},{'name':'apple','value':5}]
info_dic={}
print (info_dic)
for d in info:
   if d['name'] not in info_dic:
      info_dic[d['name']]=d['value']
   else: info_dic[d['name']]+=d['value']
new_info=[]
for n,v in info_dic.items():
   new_info.append({'name':n,'value':v})
print(new_info)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章