I am able to get the Keys but not the Values in a list. When I create another python component and get the file3dmobjects as an output into new component then it seems to work (able to get values)…
Here is my code:
import Rhino as r
f=r.FileIO.File3dm.Read(x)
o=f.Objects
values =
a=[i.Attributes.GetUserStrings().AllKeys for i in o]
for key,objs in zip(a,o):
v= objs.Attributes.GetUserStrings().Get(key)[0]
values.append(v)
b=values
can you attach the 3dm file you are trying to read?
also you can format the code using codeblocks
import Rhino as r
f=r.FileIO.File3dm.Read(x)
o=f.Objects
values = []
a=[i.Attributes.GetUserStrings().AllKeys for i in o]
for key,objs in zip(a,o):
v= objs.Attributes.GetUserStrings().Get(key)[0]
values.append(v)
b=values
When you stored the keys you got an array with all the user strings. Then when you where passing that array as a key and that was generating the error. You just need to slice the array before passing it as a key, in your code:
a=[i.Attributes.GetUserStrings().AllKeys[0] for i in o]
Yes this helps, however my real issue is to get all keys and values and if there are different amount of keys&values for each object…
Panel 1 could have some more info 3 keys and 3 values but Panel 2 could have only 1 key and 1 value…
This issue I could not figure out actually…
Then you just need a second for loop to get all the keys for each object. Here the attributes are stored a a nested list and a nested dictionary.
I guess you’ll need some sort of id to access the objects properly instead the object index I’m using to build the dictionary