Re: ok, I feel stupid, but there must be a better way than this! (finding name of unique key in dict)

2023-01-21 Thread Dino



I learned new things today and I thank you all for your responses.

Please consider yourself thanked individually.

Dino

On 1/20/2023 10:29 AM, Dino wrote:


let's say I have this list of nested dicts:


--
https://mail.python.org/mailman/listinfo/python-list


Re: ok, I feel stupid, but there must be a better way than this! (finding name of unique key in dict)

2023-01-20 Thread Rob Cliffe via Python-list

On 20/01/2023 15:29, Dino wrote:


let's say I have this list of nested dicts:

[
  { "some_key": {'a':1, 'b':2}},
  { "some_other_key": {'a':3, 'b':4}}
]

I need to turn this into:

[
  { "value": "some_key", 'a':1, 'b':2},
  { "value": "some_other_key", 'a':3, 'b':4}
]

Assuming that I believe the above, rather than the code below, this works:

listOfDescriptors = [
    { **  (L := list(D.items())[0])[1], **{'value' : L[0] } }
    for D in origListOfDescriptors]

I believe that from Python 3.9 onwards this can be written more 
concisely as:


listOfDescriptors = [
    { (L := list(D.items())[0])[1] } | {'value' : L[0] }
    for D in origListOfDescriptors]     # untested

Best wishes
Rob Cliffe



I actually did it with:

listOfDescriptors = list()
for cd in origListOfDescriptors:
    cn = list(cd.keys())[0] # There must be a better way than this!
    listOfDescriptors.append({
    "value": cn,
    "type": cd[cn]["a"],
    "description": cd[cn]["b"]
    })

and it works, but I look at this and think that there must be a better 
way. Am I missing something obvious?


PS: Screw OpenAPI!

Dino


--
https://mail.python.org/mailman/listinfo/python-list


Re: ok, I feel stupid, but there must be a better way than this! (finding name of unique key in dict)

2023-01-20 Thread Oscar Benjamin
On Fri, 20 Jan 2023 at 17:30, Dino  wrote:
>
> let's say I have this list of nested dicts:
>
> [
>{ "some_key": {'a':1, 'b':2}},
>{ "some_other_key": {'a':3, 'b':4}}
> ]
>
> I need to turn this into:
>
> [
>{ "value": "some_key", 'a':1, 'b':2},
>{ "value": "some_other_key", 'a':3, 'b':4}
> ]

You want both the key and the value so you can use items():

In [39]: L = [
...:{ "some_key": {'a':1, 'b':2}},
...:{ "some_other_key": {'a':3, 'b':4}}
...: ]

In [40]: [{"value": k, **m} for l in L for k, m in l.items()]
Out[40]:
[{'value': 'some_key', 'a': 1, 'b': 2},
 {'value': 'some_other_key', 'a': 3, 'b': 4}]

--
Oscar
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: ok, I feel stupid, but there must be a better way than this! (finding name of unique key in dict)

2023-01-20 Thread Jon Ribbens via Python-list
On 2023-01-20, Dino  wrote:
>
> let's say I have this list of nested dicts:
>
> [
>{ "some_key": {'a':1, 'b':2}},
>{ "some_other_key": {'a':3, 'b':4}}
> ]
>
> I need to turn this into:
>
> [
>{ "value": "some_key", 'a':1, 'b':2},
>{ "value": "some_other_key", 'a':3, 'b':4}
> ]

[{"value": key, **value} for d in input_data for key, value in d.items()]

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: ok, I feel stupid, but there must be a better way than this! (finding name of unique key in dict)

2023-01-20 Thread Dino

On 1/20/2023 11:06 AM, Tobiah wrote:

On 1/20/23 07:29, Dino wrote:




This doesn't look like the program output you're getting.


you are right that I tweaked the name of fields and variables manually 
(forgot a couple of places, my bad) to illustrate the problem more 
generally, but hopefully you get the spirit.


"value": cn,
"a": cd[cn]["a"],
"b": cd[cn]["b"]

Anyway, the key point (ooops, a pun) is if there's a more elegant way to 
do this (i.e. get a reference to the unique key in a dict() when the key 
is unknown):


cn = list(cd.keys())[0] # There must be a better way than this!

Thanks

--
https://mail.python.org/mailman/listinfo/python-list


Re: ok, I feel stupid, but there must be a better way than this! (finding name of unique key in dict)

2023-01-20 Thread Tobiah

On 1/20/23 07:29, Dino wrote:


let's say I have this list of nested dicts:

[
   { "some_key": {'a':1, 'b':2}},
   { "some_other_key": {'a':3, 'b':4}}
]

I need to turn this into:

[
   { "value": "some_key", 'a':1, 'b':2},
   { "value": "some_other_key", 'a':3, 'b':4}
]


This doesn't look like the program output you're getting.




--
https://mail.python.org/mailman/listinfo/python-list


ok, I feel stupid, but there must be a better way than this! (finding name of unique key in dict)

2023-01-20 Thread Dino



let's say I have this list of nested dicts:

[
  { "some_key": {'a':1, 'b':2}},
  { "some_other_key": {'a':3, 'b':4}}
]

I need to turn this into:

[
  { "value": "some_key", 'a':1, 'b':2},
  { "value": "some_other_key", 'a':3, 'b':4}
]

I actually did it with:

listOfDescriptors = list()
for cd in origListOfDescriptors:
cn = list(cd.keys())[0] # There must be a better way than this!
listOfDescriptors.append({
"value": cn,
"type": cd[cn]["a"],
"description": cd[cn]["b"]
})

and it works, but I look at this and think that there must be a better 
way. Am I missing something obvious?


PS: Screw OpenAPI!

Dino
--
https://mail.python.org/mailman/listinfo/python-list