Python Forum
How to access specific values from a dict?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to access specific values from a dict?
#1
I'm working with a dictionary (full of dictionaries, I believe?).

Here it is:
{1005672: {4461048: {'body': 'Mnow test test', 'msg_id': 4461048},
           4620511: {'body': 'test sms,test sms', 'msg_id': 4620511},
           4620584: {'body': 'test sms', 'msg_id': 4620584},
           4646648: {'body': 'test sms', 'msg_id': 4646648},
           4646877: {'body': 'test sms', 'msg_id': 4646877},
           4671891: {'body': 'test sms', 'msg_id': 4671891},
           4697824: {'body': 'test sms', 'msg_id': 4697824},
           4700841: {'body': 'test sms', 'msg_id': 4700841},
           5149461: {'body': 'Is it?', 'msg_id': 5149461},
           5159744: {'body': 'end of day test', 'msg_id': 5159744},
           5159829: {'body': 'trying again and again', 'msg_id': 5159829},
           5327356: {'body': 'test for convo id', 'msg_id': 5327356},
           5327606: {'body': 'eventually this will work!', 'msg_id': 5327606},
           5327619: {'body': 'this will work i say!', 'msg_id': 5327619},
           5327736: {'body': 'testing again\r\n', 'msg_id': 5327736},
           5332767: {'body': 'testing testing 1..2...3...', 'msg_id': 5332767},
           5333204: {'body': 'testing the convID part...', 'msg_id': 5333204},
           5333257: {'body': 'take 2!', 'msg_id': 5333257},
           5333489: {'body': 'aaaaaaaaaaaand ACTION!', 'msg_id': 5333489},
           5337141: {'body': 'does it work?', 'msg_id': 5337141},
           5363443: {'body': 'Test', 'msg_id': 5363443},
           5365638: {'body': 'testing again', 'msg_id': 5365638},
           5366005: {'body': 'testing sms ID', 'msg_id': 5366005}}}
I need to write 2 functions:

One which will take this dictionary as input, and return the 'body' value for the last line in the dictionary that was input. Please note that this dictionary is dynamic, in that the last line will be different each time the function runs.

(In this instance, it should return 'testing sms ID)

The next function should be able to take a key as input (one of the numbers on the left) and return the corresponding 'body' value.

{for example, input 5333257 should return take 2!


Thank you
Reply
#2
(Feb-05-2020, 05:03 PM)t4keheart Wrote: I want to be able to pull specific lines, by referencing the associated numbers on the left...
Could you elaborate on this? I read your post 3 times trying to figure out your question, and this seems like it, but I don't know what it means, when it comes down to code.
Reply
#3
(Feb-05-2020, 06:24 PM)micseydel Wrote:
(Feb-05-2020, 05:03 PM)t4keheart Wrote: I want to be able to pull specific lines, by referencing the associated numbers on the left...
Could you elaborate on this? I read your post 3 times trying to figure out your question, and this seems like it, but I don't know what it means, when it comes down to code.

I'm sorry if I wasn't clear. I will modify my post to try to be more direct about what I'm asking.

I need to write a function that takes the dictionary I posted in the original post as input, and returns only the last entry's 'body' value.
5366005: {'body': 'testing sms ID', 'msg_id': 5366005}}}
So, 'testing sms ID' would be returned in this case.

I would also like to write a function that can be passed the msg_id (the number on the left for each entry, or key) and return the corresponding 'body' value.

for example, input '5366005' would also return 'testing sms ID'.

I'm not quite sure what I'm working with here which has made it difficult to research solutions. Is that a dictionary of dictionarys? A dictionary of lists?

Thank you for your time.
Reply
#4
The way you have it is JSON format without any assignment. If you assign it to a variable you you can use it as a dictionary. Everything there is under the first key 1005672, so you would do this to get the sub key of 5366005 print(d[1005672][5366005])
d = {1005672: {4461048: {'body': 'Mnow test test', 'msg_id': 4461048},
           4620511: {'body': 'test sms,test sms', 'msg_id': 4620511},
           4620584: {'body': 'test sms', 'msg_id': 4620584},
           4646648: {'body': 'test sms', 'msg_id': 4646648},
           4646877: {'body': 'test sms', 'msg_id': 4646877},
           4671891: {'body': 'test sms', 'msg_id': 4671891},
           4697824: {'body': 'test sms', 'msg_id': 4697824},
           4700841: {'body': 'test sms', 'msg_id': 4700841},
           5149461: {'body': 'Is it?', 'msg_id': 5149461},
           5159744: {'body': 'end of day test', 'msg_id': 5159744},
           5159829: {'body': 'trying again and again', 'msg_id': 5159829},
           5327356: {'body': 'test for convo id', 'msg_id': 5327356},
           5327606: {'body': 'eventually this will work!', 'msg_id': 5327606},
           5327619: {'body': 'this will work i say!', 'msg_id': 5327619},
           5327736: {'body': 'testing again\r\n', 'msg_id': 5327736},
           5332767: {'body': 'testing testing 1..2...3...', 'msg_id': 5332767},
           5333204: {'body': 'testing the convID part...', 'msg_id': 5333204},
           5333257: {'body': 'take 2!', 'msg_id': 5333257},
           5333489: {'body': 'aaaaaaaaaaaand ACTION!', 'msg_id': 5333489},
           5337141: {'body': 'does it work?', 'msg_id': 5337141},
           5363443: {'body': 'Test', 'msg_id': 5363443},
           5365638: {'body': 'testing again', 'msg_id': 5365638},
           5366005: {'body': 'testing sms ID', 'msg_id': 5366005}}}

print(d[1005672][5366005])
Recommended Tutorials:
Reply
#5
metulburr- Wow, it's that easy huh! Thank you, that solves one of my issues.

So I'm realizing that in order to get the last key/value I would need to first convert to a list and sort.

x = sorted(dict.keys())[-1]
print(x)
however this returns the top level key 1005672.
Any way to apply this same logic to the sub-keys?
Reply
#6
Alright, I found a working solution for me.
For this example, my dictionary gets produced and stored to an object called 'inbound_dict'.
The following code works to return just the latest dictionary added to the set.
Now I think I can just convert to string and strip off what I don't want.


def get_latest(cached):
    latest_key = max(cache.keys())
    return cache[latest_key]["body"]

...
...**code that generates the dictionary**
...

    cached=inbound_dict
    cached={k: get_latest(cached[k]) for k in cached.keys()}
    print(cached)
Reply
#7
You would apply the same
x = sorted(d[1005672].keys())[-1]
print(x)
Recommended Tutorials:
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to access values returned from inquirer cspower 6 822 Dec-26-2023, 09:34 PM
Last Post: cspower
  Printing specific values out from a dictionary mcoliver88 6 1,422 Apr-12-2023, 08:10 PM
Last Post: deanhystad
  Creating a numpy array from specific values of a spreadsheet column JulianZ 0 1,130 Apr-19-2022, 07:36 AM
Last Post: JulianZ
  dict class override: how access parent values? Andrey 1 1,644 Mar-06-2022, 10:49 PM
Last Post: deanhystad
  Sum the values in a pandas pivot table specific columns klllmmm 1 4,651 Nov-19-2021, 04:43 PM
Last Post: klllmmm
  Removing nan values from a dict tomtom 8 7,079 Oct-05-2021, 06:44 PM
Last Post: tomtom
  Annotating plot bar from values of other a specific column celinafregoso99 0 1,971 Mar-10-2021, 03:19 PM
Last Post: celinafregoso99
  Trouble with converting list , dict to int values! faryad13 7 3,779 Sep-04-2020, 06:25 AM
Last Post: faryad13
  Check for specific values on screen and2handles 2 2,393 Jun-17-2020, 05:24 AM
Last Post: and2handles
  access dictionary with keys from another and write values to list redminote4dd 6 3,268 Jun-03-2020, 05:20 PM
Last Post: DeaD_EyE

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020