Creating dictionary need more than 1 value to unpack

Question:

I have two lists:

managers = ['john', 'karl', 'ricky']
sites = ['site1', 'site2', 'site3']

I also have a json file for each manager:

{
  "results": [
    {
      "id": "employee1",
      "user": {
        "location": "site1"
      }
    },
    {
      "id": "employee2",
      "user": {
        "location": "site1"
      }
    },
    {
      "id": "employee3",
      "user": {
        "location": "site2"
      }
    },
    {
      "id": "employee4",
      "user": {
        "location": "site3"
      }
    }
  ]
}

So now, I want to create a dictionary by to categorize data by site! which is making it challenging for me. The output I need is to show employees for each site.

Here is the code I have:

myDict = dict()

for j in managers:
    for i in range(len(sites)):
        with open(""+j+"-data.json", 'r') as jasonRead:
            json_object = json.loads(jasonRead.read())

            for result in json_object['results']:
                site = (result['user']['location'])

            for employee, manager in map(str.split, str(site), managers[i]):
                myDict.setdefault(managers[i], []).append(site)

The error I get:

  File "test.py", line 25, in <module>
    for employee, manager in map(str.split, str(site), managers[i]):
ValueError: need more than 1 value to unpack
Asked By: Michael S

||

Answers:

Instead of looping over sites, just test if the site of the employee is in the list.

The keys of the resulting dictionary should be the site names, not the manager names.

mydict = {}

for manager in managers:
    with open(f'{manager}-data.json') as jasonRead:
        json_object = json.load(jasonRead)
    for result in json_object['results']:
        site = result['user']['location']
        if site in sites:
            mydict.setdefault(site, []).append(result['id'])

print(mydict)
Answered By: Barmar
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.