2016-05-26 2 views
0

Моя цель - подсчет предложений указанным компаниям в Excel.Неверный подсчет при использовании словаря, заменяющего оператор multip-if

Я использовал множество утверждений if, чтобы делать подсчет работы раньше. коды, как ниже

ipl=gs=gt=0 
for file in glob.glob('*.xlsm'): 
    wb=load_workbook(file,data_only=True) 
    ws=wb["Tim"] 
    client=ws['B2'].value 

    if client=='Injection Parts Ltd.': 
     ipl+=1 
    if client=='Gulf Sample Ltd': 
     gs+=1 
    if client=='Great test Ltd.': 
     gt+=1 

Выше работал.

Учитывая есть более чем 20, если statments и это занимает много времени, периода, чтобы закончить проверку, я использовал словарь, как показано ниже

ipl=gs=gt=0 
for file in glob.glob('*.xlsm'): 
    wb=load_workbook(file,data_only=True) 
    ws=wb["Tim"] 
    client=ws['B2'].value 

companypool = {'Injection Parts Ltd.':ipl, 
      'Gulf Sample Ltd':gs, 
      'Great test Ltd.':gt} 

if client in companypool: 
    print(companypool[client]) 
    print(client) 
    companypool[client]+=1 

В результате companypool [клиент] всегда быть 0 и не сосчитать ,

Какие-либо коды не так?

Я новичок в Python, благодарю вас заранее.

ответ

0

Отрезные листы? Блок, начинающийся с

if client in companypool: 

не выглядит правильно отступом. И линия

companypool = {'Injection Parts Ltd.':ipl, 
    'Gulf Sample Ltd':gs, 
    'Great test Ltd.':gt} 

собирается сбросить значения словаря до 0 на каждую итерацию. Переместите его в начало сценария.

В целом это выглядит, как вы хотите:

companypool = { 
    'Injection Parts Ltd.': 0, 
    'Gulf Sample Ltd': 0, 
    'Great test Ltd.': 0, 
} 

for file in glob.glob('*.xlsm'): 
    wb = load_workbook(file, data_only=True) 
    ws = wb["Tim"] 
    client = ws['B2'].value 

    if client in companypool: 
     print(companypool[client]) 
     print(client) 
     companypool[client] += 1 

ipl = companypool['Injection Parts Ltd.'] 
gs = companypool['Gulf Sample Ltd'] 
gt = companypool['Great test Ltd.'] 
+0

Привет 101, спасибо за быстрый ответ. проблема с отступом вызвана paste.sorry.Наше второе предложение разрешило мою проблему наполовину. Оно меняет значения словаря на 0 на каждую итерацию. Фактически мне все еще нужен ipl, gs, gt как variate, потому что я должен вводить эти переменные в ячейку excel . Если я определяю их как ноль, мне сложно управлять ими в будущих кодах. Я сохранил их, но нашел ipl, gs, gt всегда равным 0, а не ценности companypool [client]. –

+0

Я добавил переменные в конце, надеюсь, что это поможет. – 101

+0

Отлично. Это сработало! Спасибо. Я нашел, что результат тот же. (Метод multi-if и dictionary). Я видел сообщение ниже, но, похоже, не улучшает производительность. Http: //stackoverflow.com/questions/17166074/most-efficient-way-of -Изготовление-ан-если-Элиф-Элиф-еще-заявление, когда-The-то еще-это-дон –