Gå til innhold

Anbefalte innlegg

Har følgende dictionary:

res = result['result']._asdict()
res.keys()                                                                                    
['EGOVMON.CRE.1.2', 'EGOVMON.PDF.03', 'EGOVMON.PDF.05', 'WCAG.PDF.14', 'EGOVMON.TITLE.1.2']

Ønsker her å filtrere nøklene. Kun de som starter med 'EGOVMON.PDF' og 'WCAG.PDF'.

 

Dette er hva vi har så langt:

filterkeys=[v for k,v in res.items() if k.startswith('EGOVMON.PDF') or k.startswith('WCAG.PDF')]

print filterkeys, vil gi oss et nytt dictionary:

[[<SOAPpy.Types.structType item at 140493364567432>: {'column': 1, 'line': 0, 'type':           'assertion', 'mode': 'automatic', 'result': 1.0}], [<SOAPpy.Types.structType item at 140493353171712>: {'column': 1, 'line': 0, 'type': 'assertion', 'mode': 'automatic', 'result':     0.0}]

Det er her vi sitter fast. Vi ønsker å hente ut nøkkelen 'result' og valuen til 'result'.

 

Altså, feks:

EGOVMON.PDF.03  result: 1.0
WCAG.PDF.14     result: 0.0

Noen som kan hjelpe til med dette?

Lenke til kommentar
Videoannonse
Annonse

Tips startswith() kan ta tuple for flere argumenter.

>>> d = {'EGOVMON.CRE.1.2': 1, 'EGOVMON.PDF.03': 2, 'EGOVMON.PDF.05': 3, 'WCAG.PDF.14': 4, 'EGOVMON.TITLE.1.2': 5}

>>> for key, value in d.iteritems():
           if key.startswith(('EGOVMON.PDF.03', 'WCAG.PDF')):
               print '{} --> {}'.format(key, value)

WCAG.PDF.14 --> 4
EGOVMON.PDF.03 --> 2

Når det gjelder verdier du får ut,så er jeg ikke sikker om det en liste med dictionary eller kanskje et par dictionary i listen.

Verdier tar du på denne på denne måten.

>>> value_lst
[['<SOAPpy.Types.structType item at 140493364567432>:',
  {'column': 1,
   'line': 0,
   'mode': 'automatic',
   'result': 1.0,
   'type': 'assertion'}],
 ['<SOAPpy.Types.structType item at 140493353171712>:',
  {'column': 1,
   'line': 0,
   'mode': 'automatic',
   'result': 0.0,
   'type': 'assertion'}]]

>>> value_lst[0][1]['result']
1.0
>>> value_lst[0][1]['result']
0.0
#eller 
value_lst_1[0][0]['<SOAPpy.Types.structType item at 140493364567432>']['result']
1.0

Dette er usikkert da jeg ikke vet helt hvordan original dicionary ser ut.

Du kan jo prøve og og forandre print linjen i koden min over til dette når du bruker eget dict.

Eller prøve siste resultat av value_lst_1.

print '{} --> {}'format(key, '\n'.join(str(value_lst[index][1]['result']) for index, value in enumerate(value_lst)))
Endret av snippsat
  • Liker 1
Lenke til kommentar
  • 2 uker senere...

Viste seg at det var et array i dictionary. Veldig forvirrende greier. Har enda et spørsmål rundt dette, hentet fra stackoverflow: SOAPpy er involvert.

 

need some help with a loop in python.

ll = ['EGOVMON.PDF.03', 'WCAG.PDF.14', 'WCAG.PDF.16', 'WCAG.PDF.04', 'WCAG.PDF.02']

res['WCAG.PDF.01'] = [<SOAPpy.Types.structType item at 140559206366096>: {'column': 3, 'line': 0, 'type': 'assertion', 'mode': 'automatic', 'result': 1.0}, <SOAPpy.Types.structType item at 140559206366528>: {'column': 10, 'line': 0, 'type': 'assertion', 'mode': 'automatic', 'result': 1.0}]

The loop:

failed = 0
passed = 0

for k in ll:
if res[k][0]['result'] == 1:
failed = failed + 1
elif res[k][0]['result'] == 0:
passed = passed + 1

In this case the index value of 'result' is [0]. However in some other cases (for instance: res['WCAG.PDF.01']), the values would be as such:

res[k][0]['result'] = 1.0
res[k][1]['result'] = 1.0

So my question is how do I increase the value in my loop? I've tried this:

failed = 0
passed = 0
x = 0
for k in ll:
if res[k][x]['result'] == 1:
failed = failed + 1
x = x + 1
failed = failed + 1
elif res[k][0]['result'] == 0:
passed = passed + 1

I know this is not correct... What I'm trying to achieve is to count all the failed tests in a SOAPpy call. So if 'result' == 1.0, it is a failed test. Because my first loop only counts the [0]'result', the others won't be counted.

Lenke til kommentar

Bruk collections.Counter,husk intendering når du poster Python kode.

from collections import Counter

lst = [['<SOAPpy.Types.structType item at 140493364567432>:',
  {'column': 1,
   'line': 0,
   'mode': 'automatic',
   'result': 1.0,
   'type': 'assertion'}],
 ['<SOAPpy.Types.structType item at 140493353171712>:',
  {'column': 1,
   'line': 0,
   'mode': 'automatic',
   'result': 0.0,
   'type': 'assertion'}]]

print Counter(item[1]['result'] for item in lst)
#--> Counter({0.0: 1, 1.0: 1})
Endret av snippsat
  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...