[Python-ideas] Is there any idea about dictionary destructing?

Eric V. Smith eric at trueblade.com
Sat Apr 7 17:39:09 EDT 2018


There was a long thread last year on a subject, titled "Dictionary 
destructing and unpacking.":
https://mail.python.org/pipermail/python-ideas/2017-June/045963.html

You might want to read through it and see what ideas and problems were 
raised then.

In that discussion, there's also a link to an older pattern matching thread:
https://mail.python.org/pipermail/python-ideas/2015-April/032907.html

Eric

On 4/7/2018 1:26 PM, thautwarm wrote:
> We know that Python support the destructing of iterable objects.
> 
> m_iter= (_for _in range(10))
> a,*b, c= m_iter
> 
> That's pretty cool! It's really convenient when there're many corner 
> cases to handle with iterable collections.
> However destructing in Python could be more convenient if we support 
> dictionary destructing.
> 
> In my opinion, dictionary destructing is not difficult to implement and 
> makes the syntax more expressive. A typical example is data access on 
> nested data structures(just like JSON), destructing a dictionary makes 
> the logic quite clear:
> 
> data= {
>      "direct": "some data",
>      "nested": {
>          "lst_data": [1,2,3],
>          "int_data": 1
> }
> }
> {
>     "direct": direct,
>      "nested": {
>          "lst_data": [a, b, c],
>      }
> }= data
> 
> 
> Dictionary destructing might not be very well-known but it really helps. 
> The operations on nested key-value collections are very frequent, and 
> the codes for business logic are not readable enough until now. Moreover 
> Python is now popular in data processing which must be enhanced by the 
> entire support of data destructing.
> 
> Here are some implementations of other languages:
> Elixir, which is also a popular dynamic language nowadays.
> 
> |iex> %{} = %{:a => 1, 2 => :b} %{2 => :b, :a => 1} iex> %{:a => a} = 
> %{:a => 1, 2 => :b} %{2 => :b, :a => 1} iex> a 1 iex> %{:c => c} = %{:a 
> => 1, 2 => :b} ** (MatchError) no match of right hand side value: %{2 => 
> :b, :a => 1}|
> 
> And in F#, there is something similar to dictionary 
> destructing(actually, this destructs `struct` instead)
> type MyRecord = { Name: string; ID: int } letIsMatchByName record1 
> (name: string) = matchrecord1 with| { MyRecord.Name = nameFound; 
> MyRecord.ID = _; } whennameFound = name -> true| _ -> falseletrecordX = 
> { Name = "Parker"; ID = 10} letisMatched1 = IsMatchByName recordX 
> "Parker"letisMatched2 = IsMatchByName recordX "Hartono"
> 
> All of them partially destructs(or matches) a dictionary.
> 
> thautwarm
> 
> 
> 
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
> 


More information about the Python-ideas mailing list